summaryrefslogtreecommitdiff
path: root/libcef/browser/views/browser_view_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'libcef/browser/views/browser_view_impl.h')
-rw-r--r--libcef/browser/views/browser_view_impl.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/libcef/browser/views/browser_view_impl.h b/libcef/browser/views/browser_view_impl.h
new file mode 100644
index 00000000..90033d58
--- /dev/null
+++ b/libcef/browser/views/browser_view_impl.h
@@ -0,0 +1,123 @@
+// Copyright 2016 The Chromium Embedded Framework Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+#ifndef CEF_LIBCEF_BROWSER_VIEWS_BROWSER_VIEW_IMPL_H_
+#define CEF_LIBCEF_BROWSER_VIEWS_BROWSER_VIEW_IMPL_H_
+#pragma once
+
+#include "include/cef_client.h"
+#include "include/views/cef_browser_view.h"
+#include "include/views/cef_browser_view_delegate.h"
+#include "libcef/browser/browser_host_base.h"
+#include "libcef/browser/views/browser_view_view.h"
+#include "libcef/browser/views/view_impl.h"
+
+#include "base/functional/callback_forward.h"
+#include "base/memory/weak_ptr.h"
+#include "ui/views/controls/webview/unhandled_keyboard_event_handler.h"
+
+class CefBrowserHostBase;
+
+class CefBrowserViewImpl
+ : public CefViewImpl<views::View, CefBrowserView, CefBrowserViewDelegate>,
+ public CefBrowserViewView::Delegate {
+ public:
+ using ParentClass =
+ CefViewImpl<views::View, CefBrowserView, CefBrowserViewDelegate>;
+
+ CefBrowserViewImpl(const CefBrowserViewImpl&) = delete;
+ CefBrowserViewImpl& operator=(const CefBrowserViewImpl&) = delete;
+
+ // Create a new CefBrowserView instance. |delegate| may be nullptr.
+ // |window_info| will only be used when creating a Chrome child window.
+ static CefRefPtr<CefBrowserViewImpl> Create(
+ const CefWindowInfo& window_info,
+ CefRefPtr<CefClient> client,
+ const CefString& url,
+ const CefBrowserSettings& settings,
+ CefRefPtr<CefDictionaryValue> extra_info,
+ CefRefPtr<CefRequestContext> request_context,
+ CefRefPtr<CefBrowserViewDelegate> delegate);
+
+ // Create a new CefBrowserView instance for a popup. |delegate| may be
+ // nullptr.
+ static CefRefPtr<CefBrowserViewImpl> CreateForPopup(
+ const CefBrowserSettings& settings,
+ CefRefPtr<CefBrowserViewDelegate> delegate);
+
+ // Called from CefBrowserPlatformDelegateViews.
+ void WebContentsCreated(content::WebContents* web_contents);
+ void BrowserCreated(CefBrowserHostBase* browser,
+ base::RepeatingClosure on_bounds_changed);
+ void BrowserDestroyed(CefBrowserHostBase* browser);
+
+ // Called to handle accelerators when the event is unhandled by the web
+ // content and the browser client.
+ bool HandleKeyboardEvent(const content::NativeWebKeyboardEvent& event);
+
+ // CefBrowserView methods:
+ CefRefPtr<CefBrowser> GetBrowser() override;
+ CefRefPtr<CefView> GetChromeToolbar() override;
+ void SetPreferAccelerators(bool prefer_accelerators) override;
+
+ // CefView methods:
+ CefRefPtr<CefBrowserView> AsBrowserView() override { return this; }
+ void RequestFocus() override;
+ void SetBackgroundColor(cef_color_t color) override;
+
+ // CefViewAdapter methods:
+ void Detach() override;
+ std::string GetDebugType() override { return "BrowserView"; }
+ void GetDebugInfo(base::Value::Dict* info, bool include_children) override;
+
+ // CefBrowserViewView::Delegate methods:
+ void OnBrowserViewAdded() override;
+ void OnBoundsChanged() override;
+
+ // Return the WebView representation of this object.
+ views::WebView* web_view() const;
+
+ private:
+ // Create a new implementation object.
+ // Always call Initialize() after creation.
+ // |delegate| may be nullptr.
+ explicit CefBrowserViewImpl(CefRefPtr<CefBrowserViewDelegate> delegate);
+
+ void SetPendingBrowserCreateParams(
+ const CefWindowInfo& window_info,
+ CefRefPtr<CefClient> client,
+ const CefString& url,
+ const CefBrowserSettings& settings,
+ CefRefPtr<CefDictionaryValue> extra_info,
+ CefRefPtr<CefRequestContext> request_context);
+
+ void SetDefaults(const CefBrowserSettings& settings);
+
+ // CefViewImpl methods:
+ views::View* CreateRootView() override;
+ void InitializeRootView() override;
+
+ // Logic extracted from UnhandledKeyboardEventHandler::HandleKeyboardEvent for
+ // the handling of accelerators. Returns true if the event was handled by the
+ // accelerator.
+ bool HandleAccelerator(const content::NativeWebKeyboardEvent& event,
+ views::FocusManager* focus_manager);
+
+ void RequestFocusInternal();
+
+ std::unique_ptr<CefBrowserCreateParams> pending_browser_create_params_;
+
+ CefRefPtr<CefBrowserHostBase> browser_;
+
+ views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_;
+ bool ignore_next_char_event_ = false;
+
+ base::RepeatingClosure on_bounds_changed_;
+
+ base::WeakPtrFactory<CefBrowserViewImpl> weak_ptr_factory_;
+
+ IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(CefBrowserViewImpl);
+};
+
+#endif // CEF_LIBCEF_BROWSER_VIEWS_BROWSER_VIEW_IMPL_H_