OLD | NEW |
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" | |
12 #include "apps/app_web_contents_helper.h" | |
13 #include "apps/app_window_geometry_cache.h" | |
14 #include "apps/app_window_registry.h" | 11 #include "apps/app_window_registry.h" |
15 #include "apps/ui/apps_client.h" | 12 #include "apps/ui/apps_client.h" |
16 #include "apps/ui/web_contents_sizer.h" | 13 #include "apps/ui/web_contents_sizer.h" |
17 #include "base/command_line.h" | 14 #include "base/command_line.h" |
18 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
19 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
20 #include "base/values.h" | 17 #include "base/values.h" |
21 #include "chrome/browser/chrome_notification_types.h" | 18 #include "chrome/browser/chrome_notification_types.h" |
22 #include "components/web_modal/web_contents_modal_dialog_manager.h" | 19 #include "components/web_modal/web_contents_modal_dialog_manager.h" |
23 #include "content/public/browser/browser_context.h" | 20 #include "content/public/browser/browser_context.h" |
24 #include "content/public/browser/invalidate_type.h" | 21 #include "content/public/browser/invalidate_type.h" |
25 #include "content/public/browser/navigation_entry.h" | 22 #include "content/public/browser/navigation_entry.h" |
26 #include "content/public/browser/notification_details.h" | 23 #include "content/public/browser/notification_details.h" |
27 #include "content/public/browser/notification_service.h" | 24 #include "content/public/browser/notification_service.h" |
28 #include "content/public/browser/notification_source.h" | 25 #include "content/public/browser/notification_source.h" |
29 #include "content/public/browser/notification_types.h" | 26 #include "content/public/browser/notification_types.h" |
30 #include "content/public/browser/render_view_host.h" | 27 #include "content/public/browser/render_view_host.h" |
31 #include "content/public/browser/resource_dispatcher_host.h" | 28 #include "content/public/browser/resource_dispatcher_host.h" |
32 #include "content/public/browser/web_contents.h" | 29 #include "content/public/browser/web_contents.h" |
33 #include "content/public/common/content_switches.h" | 30 #include "content/public/common/content_switches.h" |
34 #include "content/public/common/media_stream_request.h" | 31 #include "content/public/common/media_stream_request.h" |
| 32 #include "extensions/browser/app_window/app_delegate.h" |
| 33 #include "extensions/browser/app_window/app_web_contents_helper.h" |
| 34 #include "extensions/browser/app_window/app_window_geometry_cache.h" |
35 #include "extensions/browser/app_window/native_app_window.h" | 35 #include "extensions/browser/app_window/native_app_window.h" |
36 #include "extensions/browser/app_window/size_constraints.h" | 36 #include "extensions/browser/app_window/size_constraints.h" |
37 #include "extensions/browser/extension_registry.h" | 37 #include "extensions/browser/extension_registry.h" |
38 #include "extensions/browser/extension_system.h" | 38 #include "extensions/browser/extension_system.h" |
39 #include "extensions/browser/extensions_browser_client.h" | 39 #include "extensions/browser/extensions_browser_client.h" |
40 #include "extensions/browser/notification_types.h" | 40 #include "extensions/browser/notification_types.h" |
41 #include "extensions/browser/process_manager.h" | 41 #include "extensions/browser/process_manager.h" |
42 #include "extensions/browser/suggest_permission_util.h" | 42 #include "extensions/browser/suggest_permission_util.h" |
43 #include "extensions/browser/view_type_utils.h" | 43 #include "extensions/browser/view_type_utils.h" |
44 #include "extensions/common/draggable_region.h" | 44 #include "extensions/common/draggable_region.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 gfx::Size AppWindow::CreateParams::GetWindowMaximumSize( | 221 gfx::Size AppWindow::CreateParams::GetWindowMaximumSize( |
222 const gfx::Insets& frame_insets) const { | 222 const gfx::Insets& frame_insets) const { |
223 return GetCombinedWindowConstraints(window_spec.maximum_size, | 223 return GetCombinedWindowConstraints(window_spec.maximum_size, |
224 content_spec.maximum_size, | 224 content_spec.maximum_size, |
225 frame_insets); | 225 frame_insets); |
226 } | 226 } |
227 | 227 |
228 // AppWindow | 228 // AppWindow |
229 | 229 |
230 AppWindow::AppWindow(BrowserContext* context, | 230 AppWindow::AppWindow(BrowserContext* context, |
231 AppDelegate* app_delegate, | 231 extensions::AppDelegate* app_delegate, |
232 const extensions::Extension* extension) | 232 const extensions::Extension* extension) |
233 : browser_context_(context), | 233 : browser_context_(context), |
234 extension_id_(extension->id()), | 234 extension_id_(extension->id()), |
235 window_type_(WINDOW_TYPE_DEFAULT), | 235 window_type_(WINDOW_TYPE_DEFAULT), |
236 app_delegate_(app_delegate), | 236 app_delegate_(app_delegate), |
237 image_loader_ptr_factory_(this), | 237 image_loader_ptr_factory_(this), |
238 fullscreen_types_(FULLSCREEN_TYPE_NONE), | 238 fullscreen_types_(FULLSCREEN_TYPE_NONE), |
239 show_on_first_paint_(false), | 239 show_on_first_paint_(false), |
240 first_paint_complete_(false), | 240 first_paint_complete_(false), |
241 has_been_shown_(false), | 241 has_been_shown_(false), |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 cached_always_on_top_ = new_params.always_on_top; | 278 cached_always_on_top_ = new_params.always_on_top; |
279 if (new_params.state == ui::SHOW_STATE_FULLSCREEN) | 279 if (new_params.state == ui::SHOW_STATE_FULLSCREEN) |
280 new_params.always_on_top = false; | 280 new_params.always_on_top = false; |
281 | 281 |
282 requested_alpha_enabled_ = new_params.alpha_enabled; | 282 requested_alpha_enabled_ = new_params.alpha_enabled; |
283 | 283 |
284 AppsClient* apps_client = AppsClient::Get(); | 284 AppsClient* apps_client = AppsClient::Get(); |
285 native_app_window_.reset( | 285 native_app_window_.reset( |
286 apps_client->CreateNativeAppWindow(this, new_params)); | 286 apps_client->CreateNativeAppWindow(this, new_params)); |
287 | 287 |
288 helper_.reset(new AppWebContentsHelper( | 288 helper_.reset(new extensions::AppWebContentsHelper( |
289 browser_context_, extension_id_, web_contents, app_delegate_.get())); | 289 browser_context_, extension_id_, web_contents, app_delegate_.get())); |
290 | 290 |
291 popup_manager_.reset( | 291 popup_manager_.reset( |
292 new web_modal::PopupManager(GetWebContentsModalDialogHost())); | 292 new web_modal::PopupManager(GetWebContentsModalDialogHost())); |
293 popup_manager_->RegisterWith(web_contents); | 293 popup_manager_->RegisterWith(web_contents); |
294 | 294 |
295 // Prevent the browser process from shutting down while this window exists. | 295 // Prevent the browser process from shutting down while this window exists. |
296 apps_client->IncrementKeepAliveCount(); | 296 apps_client->IncrementKeepAliveCount(); |
297 UpdateExtensionAppIcon(); | 297 UpdateExtensionAppIcon(); |
298 AppWindowRegistry::Get(browser_context_)->AddAppWindow(this); | 298 AppWindowRegistry::Get(browser_context_)->AddAppWindow(this); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 | 433 |
434 void AppWindow::RequestToLockMouse(WebContents* web_contents, | 434 void AppWindow::RequestToLockMouse(WebContents* web_contents, |
435 bool user_gesture, | 435 bool user_gesture, |
436 bool last_unlocked_by_target) { | 436 bool last_unlocked_by_target) { |
437 DCHECK_EQ(AppWindow::web_contents(), web_contents); | 437 DCHECK_EQ(AppWindow::web_contents(), web_contents); |
438 helper_->RequestToLockMouse(); | 438 helper_->RequestToLockMouse(); |
439 } | 439 } |
440 | 440 |
441 bool AppWindow::PreHandleGestureEvent(WebContents* source, | 441 bool AppWindow::PreHandleGestureEvent(WebContents* source, |
442 const blink::WebGestureEvent& event) { | 442 const blink::WebGestureEvent& event) { |
443 return AppWebContentsHelper::ShouldSuppressGestureEvent(event); | 443 return extensions::AppWebContentsHelper::ShouldSuppressGestureEvent(event); |
444 } | 444 } |
445 | 445 |
446 void AppWindow::DidFirstVisuallyNonEmptyPaint() { | 446 void AppWindow::DidFirstVisuallyNonEmptyPaint() { |
447 first_paint_complete_ = true; | 447 first_paint_complete_ = true; |
448 if (show_on_first_paint_) { | 448 if (show_on_first_paint_) { |
449 DCHECK(delayed_show_type_ == SHOW_ACTIVE || | 449 DCHECK(delayed_show_type_ == SHOW_ACTIVE || |
450 delayed_show_type_ == SHOW_INACTIVE); | 450 delayed_show_type_ == SHOW_INACTIVE); |
451 Show(delayed_show_type_); | 451 Show(delayed_show_type_); |
452 } | 452 } |
453 } | 453 } |
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
982 WebContentsModalDialogHost* AppWindow::GetWebContentsModalDialogHost() { | 982 WebContentsModalDialogHost* AppWindow::GetWebContentsModalDialogHost() { |
983 return native_app_window_.get(); | 983 return native_app_window_.get(); |
984 } | 984 } |
985 | 985 |
986 void AppWindow::SaveWindowPosition() { | 986 void AppWindow::SaveWindowPosition() { |
987 if (window_key_.empty()) | 987 if (window_key_.empty()) |
988 return; | 988 return; |
989 if (!native_app_window_) | 989 if (!native_app_window_) |
990 return; | 990 return; |
991 | 991 |
992 AppWindowGeometryCache* cache = | 992 extensions::AppWindowGeometryCache* cache = |
993 AppWindowGeometryCache::Get(browser_context()); | 993 extensions::AppWindowGeometryCache::Get(browser_context()); |
994 | 994 |
995 gfx::Rect bounds = native_app_window_->GetRestoredBounds(); | 995 gfx::Rect bounds = native_app_window_->GetRestoredBounds(); |
996 gfx::Rect screen_bounds = | 996 gfx::Rect screen_bounds = |
997 gfx::Screen::GetNativeScreen()->GetDisplayMatching(bounds).work_area(); | 997 gfx::Screen::GetNativeScreen()->GetDisplayMatching(bounds).work_area(); |
998 ui::WindowShowState window_state = native_app_window_->GetRestoredState(); | 998 ui::WindowShowState window_state = native_app_window_->GetRestoredState(); |
999 cache->SaveGeometry( | 999 cache->SaveGeometry( |
1000 extension_id(), window_key_, bounds, screen_bounds, window_state); | 1000 extension_id(), window_key_, bounds, screen_bounds, window_state); |
1001 } | 1001 } |
1002 | 1002 |
1003 void AppWindow::AdjustBoundsToBeVisibleOnScreen( | 1003 void AppWindow::AdjustBoundsToBeVisibleOnScreen( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1040 if (params.content_spec.bounds.height() == 0 && | 1040 if (params.content_spec.bounds.height() == 0 && |
1041 params.window_spec.bounds.height() == 0) { | 1041 params.window_spec.bounds.height() == 0) { |
1042 params.content_spec.bounds.set_height(kDefaultHeight); | 1042 params.content_spec.bounds.set_height(kDefaultHeight); |
1043 } | 1043 } |
1044 | 1044 |
1045 // If left and top are left undefined, the native app window will center | 1045 // If left and top are left undefined, the native app window will center |
1046 // the window on the main screen in a platform-defined manner. | 1046 // the window on the main screen in a platform-defined manner. |
1047 | 1047 |
1048 // Load cached state if it exists. | 1048 // Load cached state if it exists. |
1049 if (!params.window_key.empty()) { | 1049 if (!params.window_key.empty()) { |
1050 AppWindowGeometryCache* cache = | 1050 extensions::AppWindowGeometryCache* cache = |
1051 AppWindowGeometryCache::Get(browser_context()); | 1051 extensions::AppWindowGeometryCache::Get(browser_context()); |
1052 | 1052 |
1053 gfx::Rect cached_bounds; | 1053 gfx::Rect cached_bounds; |
1054 gfx::Rect cached_screen_bounds; | 1054 gfx::Rect cached_screen_bounds; |
1055 ui::WindowShowState cached_state = ui::SHOW_STATE_DEFAULT; | 1055 ui::WindowShowState cached_state = ui::SHOW_STATE_DEFAULT; |
1056 if (cache->GetGeometry(extension_id(), | 1056 if (cache->GetGeometry(extension_id(), |
1057 params.window_key, | 1057 params.window_key, |
1058 &cached_bounds, | 1058 &cached_bounds, |
1059 &cached_screen_bounds, | 1059 &cached_screen_bounds, |
1060 &cached_state)) { | 1060 &cached_state)) { |
1061 // App window has cached screen bounds, make sure it fits on screen in | 1061 // App window has cached screen bounds, make sure it fits on screen in |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1095 region.bounds.x(), | 1095 region.bounds.x(), |
1096 region.bounds.y(), | 1096 region.bounds.y(), |
1097 region.bounds.right(), | 1097 region.bounds.right(), |
1098 region.bounds.bottom(), | 1098 region.bounds.bottom(), |
1099 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op); | 1099 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op); |
1100 } | 1100 } |
1101 return sk_region; | 1101 return sk_region; |
1102 } | 1102 } |
1103 | 1103 |
1104 } // namespace apps | 1104 } // namespace apps |
OLD | NEW |