OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/shell_window.h" | 5 #include "apps/shell_window.h" |
6 | 6 |
7 #include "apps/shell_window_geometry_cache.h" | 7 #include "apps/shell_window_geometry_cache.h" |
8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 bool last_unlocked_by_target) { | 273 bool last_unlocked_by_target) { |
274 bool has_permission = IsExtensionWithPermissionOrSuggestInConsole( | 274 bool has_permission = IsExtensionWithPermissionOrSuggestInConsole( |
275 APIPermission::kPointerLock, | 275 APIPermission::kPointerLock, |
276 extension_, | 276 extension_, |
277 web_contents->GetRenderViewHost()); | 277 web_contents->GetRenderViewHost()); |
278 | 278 |
279 web_contents->GotResponseToLockMouseRequest(has_permission); | 279 web_contents->GotResponseToLockMouseRequest(has_permission); |
280 } | 280 } |
281 | 281 |
282 void ShellWindow::OnNativeClose() { | 282 void ShellWindow::OnNativeClose() { |
283 if (extension_) { | 283 extensions::ShellWindowRegistry::Get(profile_)->RemoveShellWindow(this); |
284 // If |extension_| is NULL here, it is because the extension has been | 284 if (shell_window_contents_) |
285 // unloaded. In this case, the window will have already been removed from | 285 shell_window_contents_->NativeWindowClosed(); |
286 // the ShellWindowRegistry, and the app can not be informed of the window | |
287 // closing as it has gone. | |
288 extensions::ShellWindowRegistry::Get(profile_)->RemoveShellWindow(this); | |
289 if (shell_window_contents_) | |
290 shell_window_contents_->NativeWindowClosed(); | |
291 } | |
292 delete this; | 286 delete this; |
293 } | 287 } |
294 | 288 |
295 void ShellWindow::OnNativeWindowChanged() { | 289 void ShellWindow::OnNativeWindowChanged() { |
296 SaveWindowPosition(); | 290 SaveWindowPosition(); |
297 if (shell_window_contents_ && native_app_window_) | 291 if (shell_window_contents_ && native_app_window_) |
298 shell_window_contents_->NativeWindowChanged(native_app_window_.get()); | 292 shell_window_contents_->NativeWindowChanged(native_app_window_.get()); |
299 } | 293 } |
300 | 294 |
301 void ShellWindow::OnNativeWindowActivated() { | 295 void ShellWindow::OnNativeWindowActivated() { |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 delegate_->PreferredIconSize(), | 440 delegate_->PreferredIconSize(), |
447 extensions::IconsInfo::GetDefaultAppIcon(), | 441 extensions::IconsInfo::GetDefaultAppIcon(), |
448 this)); | 442 this)); |
449 | 443 |
450 // Triggers actual image loading with 1x resources. The 2x resource will | 444 // Triggers actual image loading with 1x resources. The 2x resource will |
451 // be handled by IconImage class when requested. | 445 // be handled by IconImage class when requested. |
452 app_icon_image_->image_skia().GetRepresentation(ui::SCALE_FACTOR_100P); | 446 app_icon_image_->image_skia().GetRepresentation(ui::SCALE_FACTOR_100P); |
453 } | 447 } |
454 | 448 |
455 void ShellWindow::CloseContents(WebContents* contents) { | 449 void ShellWindow::CloseContents(WebContents* contents) { |
456 Close(); | 450 native_app_window_->Close(); |
457 } | 451 } |
458 | 452 |
459 bool ShellWindow::ShouldSuppressDialogs() { | 453 bool ShellWindow::ShouldSuppressDialogs() { |
460 return true; | 454 return true; |
461 } | 455 } |
462 | 456 |
463 content::ColorChooser* ShellWindow::OpenColorChooser(WebContents* web_contents, | 457 content::ColorChooser* ShellWindow::OpenColorChooser(WebContents* web_contents, |
464 SkColor initial_color) { | 458 SkColor initial_color) { |
465 return delegate_->ShowColorChooser(web_contents, initial_color); | 459 return delegate_->ShowColorChooser(web_contents, initial_color); |
466 } | 460 } |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 // TODO(jianli): once http://crbug.com/123007 is fixed, we'll no longer | 519 // TODO(jianli): once http://crbug.com/123007 is fixed, we'll no longer |
526 // need to make the native window (ShellWindowViews specially) update | 520 // need to make the native window (ShellWindowViews specially) update |
527 // the clickthrough region for the new RVH. | 521 // the clickthrough region for the new RVH. |
528 native_app_window_->RenderViewHostChanged(); | 522 native_app_window_->RenderViewHostChanged(); |
529 break; | 523 break; |
530 } | 524 } |
531 case chrome::NOTIFICATION_EXTENSION_UNLOADED: { | 525 case chrome::NOTIFICATION_EXTENSION_UNLOADED: { |
532 const extensions::Extension* unloaded_extension = | 526 const extensions::Extension* unloaded_extension = |
533 content::Details<extensions::UnloadedExtensionInfo>( | 527 content::Details<extensions::UnloadedExtensionInfo>( |
534 details)->extension; | 528 details)->extension; |
535 if (extension_ == unloaded_extension) { | 529 if (extension_ == unloaded_extension) |
536 Close(); | 530 native_app_window_->Close(); |
537 // After this notification finishes processing, the Extension will be | |
538 // deleted, so we null out our reference to avoid bad access. | |
539 extension_ = NULL; | |
540 } | |
541 break; | 531 break; |
542 } | 532 } |
543 case chrome::NOTIFICATION_APP_TERMINATING: | 533 case chrome::NOTIFICATION_APP_TERMINATING: |
544 Close(); | 534 native_app_window_->Close(); |
545 break; | 535 break; |
546 default: | 536 default: |
547 NOTREACHED() << "Received unexpected notification"; | 537 NOTREACHED() << "Received unexpected notification"; |
548 } | 538 } |
549 } | 539 } |
550 | 540 |
551 void ShellWindow::SetWebContentsBlocked(content::WebContents* web_contents, | 541 void ShellWindow::SetWebContentsBlocked(content::WebContents* web_contents, |
552 bool blocked) { | 542 bool blocked) { |
553 delegate_->SetWebContentsBlocked(web_contents, blocked); | 543 delegate_->SetWebContentsBlocked(web_contents, blocked); |
554 } | 544 } |
555 | 545 |
556 bool ShellWindow::IsWebContentsVisible(content::WebContents* web_contents) { | 546 bool ShellWindow::IsWebContentsVisible(content::WebContents* web_contents) { |
557 return delegate_->IsWebContentsVisible(web_contents); | 547 return delegate_->IsWebContentsVisible(web_contents); |
558 } | 548 } |
559 | 549 |
560 extensions::ActiveTabPermissionGranter* | 550 extensions::ActiveTabPermissionGranter* |
561 ShellWindow::GetActiveTabPermissionGranter() { | 551 ShellWindow::GetActiveTabPermissionGranter() { |
562 // Shell windows don't support the activeTab permission. | 552 // Shell windows don't support the activeTab permission. |
563 return NULL; | 553 return NULL; |
564 } | 554 } |
565 | 555 |
566 WebContentsModalDialogHost* ShellWindow::GetWebContentsModalDialogHost() { | 556 WebContentsModalDialogHost* ShellWindow::GetWebContentsModalDialogHost() { |
567 return native_app_window_.get(); | 557 return native_app_window_.get(); |
568 } | 558 } |
569 | 559 |
570 void ShellWindow::Close() { | |
571 extensions::ShellWindowRegistry::Get(profile_)->RemoveShellWindow(this); | |
572 native_app_window_->Close(); | |
573 } | |
574 | |
575 void ShellWindow::AddMessageToDevToolsConsole(ConsoleMessageLevel level, | 560 void ShellWindow::AddMessageToDevToolsConsole(ConsoleMessageLevel level, |
576 const std::string& message) { | 561 const std::string& message) { |
577 content::RenderViewHost* rvh = web_contents()->GetRenderViewHost(); | 562 content::RenderViewHost* rvh = web_contents()->GetRenderViewHost(); |
578 rvh->Send(new ExtensionMsg_AddMessageToConsole( | 563 rvh->Send(new ExtensionMsg_AddMessageToConsole( |
579 rvh->GetRoutingID(), level, message)); | 564 rvh->GetRoutingID(), level, message)); |
580 } | 565 } |
581 | 566 |
582 void ShellWindow::SaveWindowPosition() { | 567 void ShellWindow::SaveWindowPosition() { |
583 if (window_key_.empty()) | 568 if (window_key_.empty()) |
584 return; | 569 return; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 region.bounds.x(), | 626 region.bounds.x(), |
642 region.bounds.y(), | 627 region.bounds.y(), |
643 region.bounds.right(), | 628 region.bounds.right(), |
644 region.bounds.bottom(), | 629 region.bounds.bottom(), |
645 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op); | 630 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op); |
646 } | 631 } |
647 return sk_region; | 632 return sk_region; |
648 } | 633 } |
649 | 634 |
650 } // namespace apps | 635 } // namespace apps |
OLD | NEW |