// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

[PrimaryGlobal]
interface Window : GlobalInterfaceParent {
  void windowOperation();
  attribute DOMString windowProperty;
  readonly attribute Window window;
  [CallWith=StackTrace] DOMString getStackTrace();

  // Exercise a similar setup to EventHandler.
  attribute TestEventHandler onEvent;

  // This is needed for the Promise polyfill.
  long setTimeout(TimerCallback handler, optional long timeout);
};

// Exercise a similar setup to EventHandler.
typedef SingleOperationInterface? TestEventHandler;

callback TimerCallback = void();
