| Index: apps/app_window.cc
|
| diff --git a/apps/app_window.cc b/apps/app_window.cc
|
| index d3a752b50a806371af09a9cdc081eb47a6f0372d..406da52d3bbd6f4d86338e939484fceb6b038e58 100644
|
| --- a/apps/app_window.cc
|
| +++ b/apps/app_window.cc
|
| @@ -9,6 +9,7 @@
|
| #include <vector>
|
|
|
| #include "apps/app_delegate.h"
|
| +#include "apps/app_web_contents_helper.h"
|
| #include "apps/app_window_geometry_cache.h"
|
| #include "apps/app_window_registry.h"
|
| #include "apps/apps_client.h"
|
| @@ -41,8 +42,8 @@
|
| #include "extensions/browser/extensions_browser_client.h"
|
| #include "extensions/browser/process_manager.h"
|
| #include "extensions/browser/view_type_utils.h"
|
| +#include "extensions/common/draggable_region.h"
|
| #include "extensions/common/extension.h"
|
| -#include "extensions/common/extension_messages.h"
|
| #include "extensions/common/manifest_handlers/icons_handler.h"
|
| #include "extensions/common/permissions/permissions_data.h"
|
| #include "grit/theme_resources.h"
|
| @@ -291,6 +292,9 @@ void AppWindow::Init(const GURL& url,
|
|
|
| native_app_window_.reset(delegate_->CreateNativeAppWindow(this, new_params));
|
|
|
| + helper_.reset(new AppWebContentsHelper(
|
| + browser_context_, extension_id_, web_contents, app_delegate_.get()));
|
| +
|
| popup_manager_.reset(
|
| new web_modal::PopupManager(GetWebContentsModalDialogHost()));
|
| popup_manager_->RegisterWith(web_contents);
|
| @@ -366,48 +370,14 @@ void AppWindow::RequestMediaAccessPermission(
|
| content::WebContents* web_contents,
|
| const content::MediaStreamRequest& request,
|
| const content::MediaResponseCallback& callback) {
|
| - const extensions::Extension* extension = GetExtension();
|
| - if (!extension)
|
| - return;
|
| -
|
| - app_delegate_->RequestMediaAccessPermission(
|
| - web_contents, request, callback, extension);
|
| + DCHECK_EQ(AppWindow::web_contents(), web_contents);
|
| + helper_->RequestMediaAccessPermission(request, callback);
|
| }
|
|
|
| WebContents* AppWindow::OpenURLFromTab(WebContents* source,
|
| const content::OpenURLParams& params) {
|
| - // Don't allow the current tab to be navigated. It would be nice to map all
|
| - // anchor tags (even those without target="_blank") to new tabs, but right
|
| - // now we can't distinguish between those and <meta> refreshes or window.href
|
| - // navigations, which we don't want to allow.
|
| - // TOOD(mihaip): Can we check for user gestures instead?
|
| - WindowOpenDisposition disposition = params.disposition;
|
| - if (disposition == CURRENT_TAB) {
|
| - AddMessageToDevToolsConsole(
|
| - content::CONSOLE_MESSAGE_LEVEL_ERROR,
|
| - base::StringPrintf(
|
| - "Can't open same-window link to \"%s\"; try target=\"_blank\".",
|
| - params.url.spec().c_str()));
|
| - return NULL;
|
| - }
|
| -
|
| - // These dispositions aren't really navigations.
|
| - if (disposition == SUPPRESS_OPEN || disposition == SAVE_TO_DISK ||
|
| - disposition == IGNORE_ACTION) {
|
| - return NULL;
|
| - }
|
| -
|
| - WebContents* contents =
|
| - app_delegate_->OpenURLFromTab(browser_context_, source, params);
|
| - if (!contents) {
|
| - AddMessageToDevToolsConsole(
|
| - content::CONSOLE_MESSAGE_LEVEL_ERROR,
|
| - base::StringPrintf(
|
| - "Can't navigate to \"%s\"; apps do not support navigation.",
|
| - params.url.spec().c_str()));
|
| - }
|
| -
|
| - return contents;
|
| + DCHECK_EQ(web_contents(), source);
|
| + return helper_->OpenURLFromTab(params);
|
| }
|
|
|
| void AppWindow::AddNewContents(WebContents* source,
|
| @@ -470,24 +440,13 @@ void AppWindow::HandleKeyboardEvent(
|
| void AppWindow::RequestToLockMouse(WebContents* web_contents,
|
| bool user_gesture,
|
| bool last_unlocked_by_target) {
|
| - const extensions::Extension* extension = GetExtension();
|
| - if (!extension)
|
| - return;
|
| -
|
| - bool has_permission = IsExtensionWithPermissionOrSuggestInConsole(
|
| - APIPermission::kPointerLock,
|
| - extension,
|
| - web_contents->GetRenderViewHost());
|
| -
|
| - web_contents->GotResponseToLockMouseRequest(has_permission);
|
| + DCHECK_EQ(AppWindow::web_contents(), web_contents);
|
| + helper_->RequestToLockMouse();
|
| }
|
|
|
| bool AppWindow::PreHandleGestureEvent(WebContents* source,
|
| const blink::WebGestureEvent& event) {
|
| - // Disable pinch zooming in app windows.
|
| - return event.type == blink::WebGestureEvent::GesturePinchBegin ||
|
| - event.type == blink::WebGestureEvent::GesturePinchUpdate ||
|
| - event.type == blink::WebGestureEvent::GesturePinchEnd;
|
| + return AppWebContentsHelper::ShouldSuppressGestureEvent(event);
|
| }
|
|
|
| void AppWindow::DidFirstVisuallyNonEmptyPaint() {
|
| @@ -1034,13 +993,6 @@ WebContentsModalDialogHost* AppWindow::GetWebContentsModalDialogHost() {
|
| return native_app_window_.get();
|
| }
|
|
|
| -void AppWindow::AddMessageToDevToolsConsole(ConsoleMessageLevel level,
|
| - const std::string& message) {
|
| - content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
|
| - rvh->Send(new ExtensionMsg_AddMessageToConsole(
|
| - rvh->GetRoutingID(), level, message));
|
| -}
|
| -
|
| void AppWindow::SaveWindowPosition() {
|
| if (window_key_.empty())
|
| return;
|
|
|