// Copyright (c) 2013 GitHub, Inc. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef ATOM_BROWSER_API_ATOM_API_WINDOW_H_ #define ATOM_BROWSER_API_ATOM_API_WINDOW_H_ #include #include #include "base/memory/scoped_ptr.h" #include "atom/browser/native_window_observer.h" #include "atom/browser/api/event_emitter.h" #include "native_mate/handle.h" class GURL; namespace base { class DictionaryValue; } namespace mate { class Arguments; class Dictionary; } namespace atom { class NativeWindow; namespace api { class WebContents; class Window : public mate::EventEmitter, public NativeWindowObserver { public: static mate::Wrappable* New(mate::Arguments* args, const base::DictionaryValue& options); static void BuildPrototype(v8::Isolate* isolate, v8::Handle prototype); NativeWindow* window() const { return window_.get(); } protected: explicit Window(base::DictionaryValue* options); virtual ~Window(); // Implementations of NativeWindowObserver: virtual void OnPageTitleUpdated(bool* prevent_default, const std::string& title) OVERRIDE; virtual void WillCloseWindow(bool* prevent_default) OVERRIDE; virtual void OnWindowClosed() OVERRIDE; virtual void OnWindowBlur() OVERRIDE; virtual void OnRendererUnresponsive() OVERRIDE; virtual void OnRendererResponsive() OVERRIDE; private: // APIs for NativeWindow. void Destroy(); void Close(); void Focus(); bool IsFocused(); void Show(); void Hide(); bool IsVisible(); void Maximize(); void Unmaximize(); void Minimize(); void Restore(); void SetFullscreen(bool fullscreen); bool IsFullscreen(); void SetSize(int width, int height); std::vector GetSize(); void SetMinimumSize(int width, int height); std::vector GetMinimumSize(); void SetMaximumSize(int width, int height); std::vector GetMaximumSize(); void SetResizable(bool resizable); bool IsResizable(); void SetAlwaysOnTop(bool top); bool IsAlwaysOnTop(); void Center(); void SetPosition(int x, int y); std::vector GetPosition(); void SetTitle(const std::string& title); std::string GetTitle(); void FlashFrame(bool flash); void SetKiosk(bool kiosk); bool IsKiosk(); void OpenDevTools(); void CloseDevTools(); bool IsDevToolsOpened(); void InspectElement(int x, int y); void DebugDevTools(); void FocusOnWebView(); void BlurWebView(); bool IsWebViewFocused(); void CapturePage(mate::Arguments* args); // APIs for WebContents. mate::Handle GetWebContents(v8::Isolate* isolate) const; mate::Handle GetDevToolsWebContents(v8::Isolate* isolate) const; // APIs for NavigationController. void LoadURL(const GURL& url); bool CanGoBack(); bool CanGoForward(); bool CanGoToOffset(int offset); void GoBack(); void GoForward(); void GoToIndex(int index); void GoToOffset(int offset); void Reload(); void ReloadIgnoringCache(); scoped_ptr window_; DISALLOW_COPY_AND_ASSIGN(Window); }; } // namespace api } // namespace atom namespace mate { template<> struct Converter { static bool FromV8(v8::Isolate* isolate, v8::Handle val, atom::NativeWindow** out) { // null would be tranfered to NULL. if (val->IsNull()) { *out = NULL; return true; } atom::api::Window* window; if (!Converter::FromV8(isolate, val, &window)) return false; *out = window->window(); return true; } }; } // namespace mate #endif // ATOM_BROWSER_API_ATOM_API_WINDOW_H_