Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(382)

Side by Side Diff: apps/app_window.cc

Issue 423453002: Refactor AppWindow to enable code re-use with launcher pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « apps/app_window.h ('k') | apps/apps.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "apps/app_window.h" 5 #include "apps/app_window.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "apps/app_delegate.h" 11 #include "apps/app_delegate.h"
12 #include "apps/app_web_contents_helper.h"
12 #include "apps/app_window_geometry_cache.h" 13 #include "apps/app_window_geometry_cache.h"
13 #include "apps/app_window_registry.h" 14 #include "apps/app_window_registry.h"
14 #include "apps/apps_client.h" 15 #include "apps/apps_client.h"
15 #include "apps/size_constraints.h" 16 #include "apps/size_constraints.h"
16 #include "apps/ui/native_app_window.h" 17 #include "apps/ui/native_app_window.h"
17 #include "apps/ui/web_contents_sizer.h" 18 #include "apps/ui/web_contents_sizer.h"
18 #include "base/command_line.h" 19 #include "base/command_line.h"
19 #include "base/strings/string_util.h" 20 #include "base/strings/string_util.h"
20 #include "base/strings/utf_string_conversions.h" 21 #include "base/strings/utf_string_conversions.h"
21 #include "base/values.h" 22 #include "base/values.h"
(...skipping 13 matching lines...) Expand all
35 #include "content/public/browser/resource_dispatcher_host.h" 36 #include "content/public/browser/resource_dispatcher_host.h"
36 #include "content/public/browser/web_contents.h" 37 #include "content/public/browser/web_contents.h"
37 #include "content/public/common/content_switches.h" 38 #include "content/public/common/content_switches.h"
38 #include "content/public/common/media_stream_request.h" 39 #include "content/public/common/media_stream_request.h"
39 #include "extensions/browser/extension_registry.h" 40 #include "extensions/browser/extension_registry.h"
40 #include "extensions/browser/extension_system.h" 41 #include "extensions/browser/extension_system.h"
41 #include "extensions/browser/extensions_browser_client.h" 42 #include "extensions/browser/extensions_browser_client.h"
42 #include "extensions/browser/notification_types.h" 43 #include "extensions/browser/notification_types.h"
43 #include "extensions/browser/process_manager.h" 44 #include "extensions/browser/process_manager.h"
44 #include "extensions/browser/view_type_utils.h" 45 #include "extensions/browser/view_type_utils.h"
46 #include "extensions/common/draggable_region.h"
45 #include "extensions/common/extension.h" 47 #include "extensions/common/extension.h"
46 #include "extensions/common/extension_messages.h"
47 #include "extensions/common/manifest_handlers/icons_handler.h" 48 #include "extensions/common/manifest_handlers/icons_handler.h"
48 #include "extensions/common/permissions/permissions_data.h" 49 #include "extensions/common/permissions/permissions_data.h"
49 #include "grit/theme_resources.h" 50 #include "grit/theme_resources.h"
50 #include "third_party/skia/include/core/SkRegion.h" 51 #include "third_party/skia/include/core/SkRegion.h"
51 #include "ui/base/resource/resource_bundle.h" 52 #include "ui/base/resource/resource_bundle.h"
52 #include "ui/gfx/screen.h" 53 #include "ui/gfx/screen.h"
53 54
54 #if !defined(OS_MACOSX) 55 #if !defined(OS_MACOSX)
55 #include "apps/pref_names.h" 56 #include "apps/pref_names.h"
56 #include "base/prefs/pref_service.h" 57 #include "base/prefs/pref_service.h"
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 286
286 // Windows cannot be always-on-top in fullscreen mode for security reasons. 287 // Windows cannot be always-on-top in fullscreen mode for security reasons.
287 cached_always_on_top_ = new_params.always_on_top; 288 cached_always_on_top_ = new_params.always_on_top;
288 if (new_params.state == ui::SHOW_STATE_FULLSCREEN) 289 if (new_params.state == ui::SHOW_STATE_FULLSCREEN)
289 new_params.always_on_top = false; 290 new_params.always_on_top = false;
290 291
291 requested_transparent_background_ = new_params.transparent_background; 292 requested_transparent_background_ = new_params.transparent_background;
292 293
293 native_app_window_.reset(delegate_->CreateNativeAppWindow(this, new_params)); 294 native_app_window_.reset(delegate_->CreateNativeAppWindow(this, new_params));
294 295
296 helper_.reset(new AppWebContentsHelper(
297 browser_context_, extension_id_, web_contents, app_delegate_.get()));
298
295 popup_manager_.reset( 299 popup_manager_.reset(
296 new web_modal::PopupManager(GetWebContentsModalDialogHost())); 300 new web_modal::PopupManager(GetWebContentsModalDialogHost()));
297 popup_manager_->RegisterWith(web_contents); 301 popup_manager_->RegisterWith(web_contents);
298 302
299 // Prevent the browser process from shutting down while this window exists. 303 // Prevent the browser process from shutting down while this window exists.
300 AppsClient::Get()->IncrementKeepAliveCount(); 304 AppsClient::Get()->IncrementKeepAliveCount();
301 UpdateExtensionAppIcon(); 305 UpdateExtensionAppIcon();
302 AppWindowRegistry::Get(browser_context_)->AddAppWindow(this); 306 AppWindowRegistry::Get(browser_context_)->AddAppWindow(this);
303 307
304 if (new_params.hidden) { 308 if (new_params.hidden) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 registrar_.RemoveAll(); 365 registrar_.RemoveAll();
362 366
363 // Remove shutdown prevention. 367 // Remove shutdown prevention.
364 AppsClient::Get()->DecrementKeepAliveCount(); 368 AppsClient::Get()->DecrementKeepAliveCount();
365 } 369 }
366 370
367 void AppWindow::RequestMediaAccessPermission( 371 void AppWindow::RequestMediaAccessPermission(
368 content::WebContents* web_contents, 372 content::WebContents* web_contents,
369 const content::MediaStreamRequest& request, 373 const content::MediaStreamRequest& request,
370 const content::MediaResponseCallback& callback) { 374 const content::MediaResponseCallback& callback) {
371 const extensions::Extension* extension = GetExtension(); 375 DCHECK_EQ(AppWindow::web_contents(), web_contents);
372 if (!extension) 376 helper_->RequestMediaAccessPermission(request, callback);
373 return;
374
375 app_delegate_->RequestMediaAccessPermission(
376 web_contents, request, callback, extension);
377 } 377 }
378 378
379 WebContents* AppWindow::OpenURLFromTab(WebContents* source, 379 WebContents* AppWindow::OpenURLFromTab(WebContents* source,
380 const content::OpenURLParams& params) { 380 const content::OpenURLParams& params) {
381 // Don't allow the current tab to be navigated. It would be nice to map all 381 DCHECK_EQ(web_contents(), source);
382 // anchor tags (even those without target="_blank") to new tabs, but right 382 return helper_->OpenURLFromTab(params);
383 // now we can't distinguish between those and <meta> refreshes or window.href
384 // navigations, which we don't want to allow.
385 // TOOD(mihaip): Can we check for user gestures instead?
386 WindowOpenDisposition disposition = params.disposition;
387 if (disposition == CURRENT_TAB) {
388 AddMessageToDevToolsConsole(
389 content::CONSOLE_MESSAGE_LEVEL_ERROR,
390 base::StringPrintf(
391 "Can't open same-window link to \"%s\"; try target=\"_blank\".",
392 params.url.spec().c_str()));
393 return NULL;
394 }
395
396 // These dispositions aren't really navigations.
397 if (disposition == SUPPRESS_OPEN || disposition == SAVE_TO_DISK ||
398 disposition == IGNORE_ACTION) {
399 return NULL;
400 }
401
402 WebContents* contents =
403 app_delegate_->OpenURLFromTab(browser_context_, source, params);
404 if (!contents) {
405 AddMessageToDevToolsConsole(
406 content::CONSOLE_MESSAGE_LEVEL_ERROR,
407 base::StringPrintf(
408 "Can't navigate to \"%s\"; apps do not support navigation.",
409 params.url.spec().c_str()));
410 }
411
412 return contents;
413 } 383 }
414 384
415 void AppWindow::AddNewContents(WebContents* source, 385 void AppWindow::AddNewContents(WebContents* source,
416 WebContents* new_contents, 386 WebContents* new_contents,
417 WindowOpenDisposition disposition, 387 WindowOpenDisposition disposition,
418 const gfx::Rect& initial_pos, 388 const gfx::Rect& initial_pos,
419 bool user_gesture, 389 bool user_gesture,
420 bool* was_blocked) { 390 bool* was_blocked) {
421 DCHECK(new_contents->GetBrowserContext() == browser_context_); 391 DCHECK(new_contents->GetBrowserContext() == browser_context_);
422 app_delegate_->AddNewContents(browser_context_, 392 app_delegate_->AddNewContents(browser_context_,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 Restore(); 435 Restore();
466 return; 436 return;
467 } 437 }
468 438
469 native_app_window_->HandleKeyboardEvent(event); 439 native_app_window_->HandleKeyboardEvent(event);
470 } 440 }
471 441
472 void AppWindow::RequestToLockMouse(WebContents* web_contents, 442 void AppWindow::RequestToLockMouse(WebContents* web_contents,
473 bool user_gesture, 443 bool user_gesture,
474 bool last_unlocked_by_target) { 444 bool last_unlocked_by_target) {
475 const extensions::Extension* extension = GetExtension(); 445 DCHECK_EQ(AppWindow::web_contents(), web_contents);
476 if (!extension) 446 helper_->RequestToLockMouse();
477 return;
478
479 bool has_permission = IsExtensionWithPermissionOrSuggestInConsole(
480 APIPermission::kPointerLock,
481 extension,
482 web_contents->GetRenderViewHost());
483
484 web_contents->GotResponseToLockMouseRequest(has_permission);
485 } 447 }
486 448
487 bool AppWindow::PreHandleGestureEvent(WebContents* source, 449 bool AppWindow::PreHandleGestureEvent(WebContents* source,
488 const blink::WebGestureEvent& event) { 450 const blink::WebGestureEvent& event) {
489 // Disable pinch zooming in app windows. 451 return AppWebContentsHelper::ShouldSuppressGestureEvent(event);
490 return event.type == blink::WebGestureEvent::GesturePinchBegin ||
491 event.type == blink::WebGestureEvent::GesturePinchUpdate ||
492 event.type == blink::WebGestureEvent::GesturePinchEnd;
493 } 452 }
494 453
495 void AppWindow::DidFirstVisuallyNonEmptyPaint() { 454 void AppWindow::DidFirstVisuallyNonEmptyPaint() {
496 first_paint_complete_ = true; 455 first_paint_complete_ = true;
497 if (show_on_first_paint_) { 456 if (show_on_first_paint_) {
498 DCHECK(delayed_show_type_ == SHOW_ACTIVE || 457 DCHECK(delayed_show_type_ == SHOW_ACTIVE ||
499 delayed_show_type_ == SHOW_INACTIVE); 458 delayed_show_type_ == SHOW_INACTIVE);
500 Show(delayed_show_type_); 459 Show(delayed_show_type_);
501 } 460 }
502 } 461 }
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 } 988 }
1030 989
1031 bool AppWindow::IsWebContentsVisible(content::WebContents* web_contents) { 990 bool AppWindow::IsWebContentsVisible(content::WebContents* web_contents) {
1032 return app_delegate_->IsWebContentsVisible(web_contents); 991 return app_delegate_->IsWebContentsVisible(web_contents);
1033 } 992 }
1034 993
1035 WebContentsModalDialogHost* AppWindow::GetWebContentsModalDialogHost() { 994 WebContentsModalDialogHost* AppWindow::GetWebContentsModalDialogHost() {
1036 return native_app_window_.get(); 995 return native_app_window_.get();
1037 } 996 }
1038 997
1039 void AppWindow::AddMessageToDevToolsConsole(ConsoleMessageLevel level,
1040 const std::string& message) {
1041 content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
1042 rvh->Send(new ExtensionMsg_AddMessageToConsole(
1043 rvh->GetRoutingID(), level, message));
1044 }
1045
1046 void AppWindow::SaveWindowPosition() { 998 void AppWindow::SaveWindowPosition() {
1047 if (window_key_.empty()) 999 if (window_key_.empty())
1048 return; 1000 return;
1049 if (!native_app_window_) 1001 if (!native_app_window_)
1050 return; 1002 return;
1051 1003
1052 AppWindowGeometryCache* cache = 1004 AppWindowGeometryCache* cache =
1053 AppWindowGeometryCache::Get(browser_context()); 1005 AppWindowGeometryCache::Get(browser_context());
1054 1006
1055 gfx::Rect bounds = native_app_window_->GetRestoredBounds(); 1007 gfx::Rect bounds = native_app_window_->GetRestoredBounds();
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 region.bounds.x(), 1106 region.bounds.x(),
1155 region.bounds.y(), 1107 region.bounds.y(),
1156 region.bounds.right(), 1108 region.bounds.right(),
1157 region.bounds.bottom(), 1109 region.bounds.bottom(),
1158 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op); 1110 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op);
1159 } 1111 }
1160 return sk_region; 1112 return sk_region;
1161 } 1113 }
1162 1114
1163 } // namespace apps 1115 } // namespace apps
OLDNEW
« no previous file with comments | « apps/app_window.h ('k') | apps/apps.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698