mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-13 18:50:43 +01:00
6cb9f0c695
This change moves the runtime-specific implementations of CefBrowserHostImpl methods to CefBrowserPlatformDelegate. Some WebContentsDelegate methods implemented by CefBrowserHostImpl set state or trigger client callbacks. Those implementations will likely stay with CefBrowserHostImpl and will need to be called from the Browser equivalents when using the Chrome runtime.
96 lines
3.3 KiB
C++
96 lines
3.3 KiB
C++
// Copyright 2017 the Chromium Embedded Framework Authors. Portions copyright
|
|
// 2013 The Chromium Authors. All rights reserved. Use of this source code is
|
|
// governed by a BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "libcef/browser/extensions/extension_view_host.h"
|
|
|
|
#include "libcef/browser/browser_platform_delegate.h"
|
|
#include "libcef/browser/extensions/extension_host_delegate.h"
|
|
|
|
#include "content/public/browser/notification_source.h"
|
|
#include "content/public/browser/web_contents.h"
|
|
#include "extensions/browser/extension_system.h"
|
|
#include "extensions/browser/notification_types.h"
|
|
#include "extensions/browser/runtime_data.h"
|
|
#include "third_party/blink/public/common/input/web_gesture_event.h"
|
|
|
|
using content::NativeWebKeyboardEvent;
|
|
using content::OpenURLParams;
|
|
using content::WebContents;
|
|
using content::WebContentsObserver;
|
|
|
|
namespace extensions {
|
|
|
|
CefExtensionViewHost::CefExtensionViewHost(CefBrowserHostImpl* browser,
|
|
const Extension* extension,
|
|
content::WebContents* host_contents,
|
|
const GURL& url,
|
|
ViewType host_type)
|
|
: ExtensionHost(new CefExtensionHostDelegate(browser),
|
|
extension,
|
|
host_contents->GetBrowserContext(),
|
|
host_contents,
|
|
url,
|
|
host_type) {
|
|
// Only used for dialogs and popups.
|
|
DCHECK(host_type == VIEW_TYPE_EXTENSION_DIALOG ||
|
|
host_type == VIEW_TYPE_EXTENSION_POPUP);
|
|
}
|
|
|
|
CefExtensionViewHost::~CefExtensionViewHost() {}
|
|
|
|
void CefExtensionViewHost::OnDidStopFirstLoad() {
|
|
// Nothing to do here, but don't call the base class method.
|
|
}
|
|
|
|
void CefExtensionViewHost::LoadInitialURL() {
|
|
if (!ExtensionSystem::Get(browser_context())
|
|
->runtime_data()
|
|
->IsBackgroundPageReady(extension())) {
|
|
// Make sure the background page loads before any others.
|
|
registrar_.Add(this,
|
|
extensions::NOTIFICATION_EXTENSION_BACKGROUND_PAGE_READY,
|
|
content::Source<Extension>(extension()));
|
|
return;
|
|
}
|
|
|
|
ExtensionHost::LoadInitialURL();
|
|
}
|
|
|
|
bool CefExtensionViewHost::IsBackgroundPage() const {
|
|
return false;
|
|
}
|
|
|
|
bool CefExtensionViewHost::ShouldTransferNavigation(
|
|
bool is_main_frame_navigation) {
|
|
// Block navigations that cause the main frame to navigate to non-extension
|
|
// content (i.e. to web content).
|
|
return !is_main_frame_navigation;
|
|
}
|
|
|
|
bool CefExtensionViewHost::PreHandleGestureEvent(
|
|
content::WebContents* source,
|
|
const blink::WebGestureEvent& event) {
|
|
// Disable pinch zooming.
|
|
return blink::WebInputEvent::IsPinchGestureEventType(event.GetType());
|
|
}
|
|
|
|
WebContents* CefExtensionViewHost::GetVisibleWebContents() const {
|
|
if (extension_host_type() == VIEW_TYPE_EXTENSION_POPUP)
|
|
return host_contents();
|
|
return nullptr;
|
|
}
|
|
|
|
void CefExtensionViewHost::Observe(
|
|
int type,
|
|
const content::NotificationSource& source,
|
|
const content::NotificationDetails& details) {
|
|
DCHECK_EQ(type, extensions::NOTIFICATION_EXTENSION_BACKGROUND_PAGE_READY);
|
|
DCHECK(ExtensionSystem::Get(browser_context())
|
|
->runtime_data()
|
|
->IsBackgroundPageReady(extension()));
|
|
LoadInitialURL();
|
|
}
|
|
|
|
} // namespace extensions
|