mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
99 lines
3.3 KiB
C++
99 lines
3.3 KiB
C++
// Copyright (c) 2013 GitHub, Inc.
|
||
// Use of this source code is governed by the MIT license that can be
|
||
// found in the LICENSE file.
|
||
|
||
#ifndef ELECTRON_SHELL_BROWSER_API_ELECTRON_API_BROWSER_WINDOW_H_
|
||
#define ELECTRON_SHELL_BROWSER_API_ELECTRON_API_BROWSER_WINDOW_H_
|
||
|
||
#include <string>
|
||
|
||
#include "base/cancelable_callback.h"
|
||
#include "shell/browser/api/electron_api_base_window.h"
|
||
#include "shell/browser/api/electron_api_web_contents.h"
|
||
#include "shell/browser/ui/drag_util.h"
|
||
|
||
namespace gin_helper {
|
||
class ErrorThrower;
|
||
} // namespace gin_helper
|
||
|
||
namespace electron::api {
|
||
|
||
class BrowserWindow : public BaseWindow,
|
||
private content::WebContentsObserver,
|
||
private ExtendedWebContentsObserver {
|
||
public:
|
||
static gin_helper::WrappableBase* New(gin_helper::ErrorThrower thrower,
|
||
gin::Arguments* args);
|
||
|
||
static void BuildPrototype(v8::Isolate* isolate,
|
||
v8::Local<v8::FunctionTemplate> prototype);
|
||
|
||
// Returns the BrowserWindow object from |native_window|.
|
||
static v8::Local<v8::Value> From(v8::Isolate* isolate,
|
||
NativeWindow* native_window);
|
||
|
||
// disable copy
|
||
BrowserWindow(const BrowserWindow&) = delete;
|
||
BrowserWindow& operator=(const BrowserWindow&) = delete;
|
||
|
||
protected:
|
||
BrowserWindow(gin::Arguments* args, const gin_helper::Dictionary& options);
|
||
~BrowserWindow() override;
|
||
|
||
// content::WebContentsObserver:
|
||
void BeforeUnloadDialogCancelled() override;
|
||
void RenderViewReady() override;
|
||
void WebContentsDestroyed() override;
|
||
|
||
// ExtendedWebContentsObserver:
|
||
void OnSetContentBounds(const gfx::Rect& rect) override;
|
||
void OnActivateContents() override;
|
||
void OnPageTitleUpdated(const std::u16string& title,
|
||
bool explicit_set) override;
|
||
|
||
// NativeWindowObserver:
|
||
void RequestPreferredWidth(int* width) override;
|
||
void OnCloseButtonClicked(bool* prevent_default) override;
|
||
void OnWindowIsKeyChanged(bool is_key) override;
|
||
void UpdateWindowControlsOverlay(const gfx::Rect& bounding_rect) override;
|
||
|
||
// BaseWindow:
|
||
void OnWindowBlur() override;
|
||
void OnWindowFocus() override;
|
||
void OnWindowLeaveFullScreen() override;
|
||
void CloseImmediately() override;
|
||
void Focus() override;
|
||
void Blur() override;
|
||
void SetBackgroundColor(const std::string& color_name) override;
|
||
void SetBackgroundMaterial(const std::string& material) override;
|
||
void OnWindowShow() override;
|
||
void OnWindowHide() override;
|
||
void Show() override;
|
||
void ShowInactive() override;
|
||
|
||
// BrowserWindow APIs.
|
||
void FocusOnWebView();
|
||
void BlurWebView();
|
||
bool IsWebViewFocused();
|
||
v8::Local<v8::Value> GetWebContents(v8::Isolate* isolate);
|
||
|
||
private:
|
||
// Helpers.
|
||
|
||
// When true and the window is created with show: false, the renderer is
|
||
// told it is visible as soon as it is ready so that PerformanceObserver
|
||
// paint‐timing entries (first-paint / first-contentful-paint) are
|
||
// produced even before the native window is shown.
|
||
bool paint_when_initially_hidden_ = false;
|
||
|
||
v8::Global<v8::Value> web_contents_;
|
||
v8::Global<v8::Value> web_contents_view_;
|
||
base::WeakPtr<api::WebContents> api_web_contents_;
|
||
|
||
base::WeakPtrFactory<BrowserWindow> weak_factory_{this};
|
||
};
|
||
|
||
} // namespace electron::api
|
||
|
||
#endif // ELECTRON_SHELL_BROWSER_API_ELECTRON_API_BROWSER_WINDOW_H_
|