OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/extensions/tab_helper.h" | 5 #include "chrome/browser/extensions/tab_helper.h" |
6 | 6 |
7 #include "chrome/browser/extensions/activity_log.h" | 7 #include "chrome/browser/extensions/activity_log.h" |
8 #include "chrome/browser/extensions/app_notify_channel_ui.h" | 8 #include "chrome/browser/extensions/app_notify_channel_ui.h" |
9 #include "chrome/browser/extensions/crx_installer.h" | 9 #include "chrome/browser/extensions/crx_installer.h" |
10 #include "chrome/browser/extensions/extension_action.h" | 10 #include "chrome/browser/extensions/extension_action.h" |
11 #include "chrome/browser/extensions/extension_action_manager.h" | 11 #include "chrome/browser/extensions/extension_action_manager.h" |
12 #include "chrome/browser/extensions/extension_service.h" | 12 #include "chrome/browser/extensions/extension_service.h" |
13 #include "chrome/browser/extensions/extension_tab_util.h" | 13 #include "chrome/browser/extensions/extension_tab_util.h" |
| 14 #include "chrome/browser/extensions/image_loader.h" |
14 #include "chrome/browser/extensions/page_action_controller.h" | 15 #include "chrome/browser/extensions/page_action_controller.h" |
15 #include "chrome/browser/extensions/script_badge_controller.h" | 16 #include "chrome/browser/extensions/script_badge_controller.h" |
16 #include "chrome/browser/extensions/script_bubble_controller.h" | 17 #include "chrome/browser/extensions/script_bubble_controller.h" |
17 #include "chrome/browser/extensions/script_executor.h" | 18 #include "chrome/browser/extensions/script_executor.h" |
18 #include "chrome/browser/extensions/webstore_standalone_installer.h" | 19 #include "chrome/browser/extensions/webstore_standalone_installer.h" |
19 #include "chrome/browser/profiles/profile.h" | 20 #include "chrome/browser/profiles/profile.h" |
20 #include "chrome/browser/sessions/session_id.h" | 21 #include "chrome/browser/sessions/session_id.h" |
21 #include "chrome/browser/sessions/session_tab_helper.h" | 22 #include "chrome/browser/sessions/session_tab_helper.h" |
22 #include "chrome/browser/ui/browser_dialogs.h" | 23 #include "chrome/browser/ui/browser_dialogs.h" |
23 #include "chrome/browser/ui/web_applications/web_app_ui.h" | 24 #include "chrome/browser/ui/web_applications/web_app_ui.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 | 76 |
76 TabHelper::TabHelper(content::WebContents* web_contents) | 77 TabHelper::TabHelper(content::WebContents* web_contents) |
77 : content::WebContentsObserver(web_contents), | 78 : content::WebContentsObserver(web_contents), |
78 extension_app_(NULL), | 79 extension_app_(NULL), |
79 ALLOW_THIS_IN_INITIALIZER_LIST( | 80 ALLOW_THIS_IN_INITIALIZER_LIST( |
80 extension_function_dispatcher_( | 81 extension_function_dispatcher_( |
81 Profile::FromBrowserContext(web_contents->GetBrowserContext()), | 82 Profile::FromBrowserContext(web_contents->GetBrowserContext()), |
82 this)), | 83 this)), |
83 pending_web_app_action_(NONE), | 84 pending_web_app_action_(NONE), |
84 script_executor_(new ScriptExecutor(web_contents, | 85 script_executor_(new ScriptExecutor(web_contents, |
85 &script_execution_observers_)) { | 86 &script_execution_observers_)), |
| 87 ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_ptr_factory_(this)) { |
86 // The ActiveTabPermissionManager requires a session ID; ensure this | 88 // The ActiveTabPermissionManager requires a session ID; ensure this |
87 // WebContents has one. | 89 // WebContents has one. |
88 SessionTabHelper::CreateForWebContents(web_contents); | 90 SessionTabHelper::CreateForWebContents(web_contents); |
89 active_tab_permission_granter_.reset(new ActiveTabPermissionGranter( | 91 active_tab_permission_granter_.reset(new ActiveTabPermissionGranter( |
90 web_contents, | 92 web_contents, |
91 SessionID::IdForTab(web_contents), | 93 SessionID::IdForTab(web_contents), |
92 Profile::FromBrowserContext(web_contents->GetBrowserContext()))); | 94 Profile::FromBrowserContext(web_contents->GetBrowserContext()))); |
93 if (FeatureSwitch::script_badges()->IsEnabled()) { | 95 if (FeatureSwitch::script_badges()->IsEnabled()) { |
94 location_bar_controller_.reset( | 96 location_bar_controller_.reset( |
95 new ScriptBadgeController(web_contents, this)); | 97 new ScriptBadgeController(web_contents, this)); |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 if (!extension_service || !extension_service->is_ready()) | 427 if (!extension_service || !extension_service->is_ready()) |
426 return NULL; | 428 return NULL; |
427 | 429 |
428 const Extension* extension = | 430 const Extension* extension = |
429 extension_service->GetExtensionById(extension_app_id, false); | 431 extension_service->GetExtensionById(extension_app_id, false); |
430 return extension; | 432 return extension; |
431 } | 433 } |
432 | 434 |
433 void TabHelper::UpdateExtensionAppIcon(const Extension* extension) { | 435 void TabHelper::UpdateExtensionAppIcon(const Extension* extension) { |
434 extension_app_icon_.reset(); | 436 extension_app_icon_.reset(); |
| 437 // Ensure previously enqueued callbacks are ignored. |
| 438 image_loader_ptr_factory_.InvalidateWeakPtrs(); |
435 | 439 |
| 440 // Enqueue OnImageLoaded callback. |
436 if (extension) { | 441 if (extension) { |
437 extension_app_image_loader_.reset(new ImageLoadingTracker(this)); | 442 Profile* profile = |
438 extension_app_image_loader_->LoadImage( | 443 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
| 444 extensions::ImageLoader* loader = extensions::ImageLoader::Get(profile); |
| 445 loader->LoadImageAsync( |
439 extension, | 446 extension, |
440 extension->GetIconResource(extension_misc::EXTENSION_ICON_SMALLISH, | 447 extension->GetIconResource(extension_misc::EXTENSION_ICON_SMALLISH, |
441 ExtensionIconSet::MATCH_EXACTLY), | 448 ExtensionIconSet::MATCH_EXACTLY), |
442 gfx::Size(extension_misc::EXTENSION_ICON_SMALLISH, | 449 gfx::Size(extension_misc::EXTENSION_ICON_SMALLISH, |
443 extension_misc::EXTENSION_ICON_SMALLISH), | 450 extension_misc::EXTENSION_ICON_SMALLISH), |
444 ImageLoadingTracker::CACHE); | 451 base::Bind(&TabHelper::OnImageLoaded, |
445 } else { | 452 image_loader_ptr_factory_.GetWeakPtr())); |
446 extension_app_image_loader_.reset(NULL); | |
447 } | 453 } |
448 } | 454 } |
449 | 455 |
450 void TabHelper::SetAppIcon(const SkBitmap& app_icon) { | 456 void TabHelper::SetAppIcon(const SkBitmap& app_icon) { |
451 extension_app_icon_ = app_icon; | 457 extension_app_icon_ = app_icon; |
452 web_contents()->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TITLE); | 458 web_contents()->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TITLE); |
453 } | 459 } |
454 | 460 |
455 void TabHelper::OnImageLoaded(const gfx::Image& image, | 461 void TabHelper::OnImageLoaded(const gfx::Image& image) { |
456 const std::string& extension_id, | |
457 int index) { | |
458 if (!image.IsEmpty()) { | 462 if (!image.IsEmpty()) { |
459 extension_app_icon_ = *image.ToSkBitmap(); | 463 extension_app_icon_ = *image.ToSkBitmap(); |
460 web_contents()->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TAB); | 464 web_contents()->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TAB); |
461 } | 465 } |
462 } | 466 } |
463 | 467 |
464 WindowController* TabHelper::GetExtensionWindowController() const { | 468 WindowController* TabHelper::GetExtensionWindowController() const { |
465 return ExtensionTabUtil::GetWindowControllerOfTab(web_contents()); | 469 return ExtensionTabUtil::GetWindowControllerOfTab(web_contents()); |
466 } | 470 } |
467 | 471 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 script_bubble_controller_->OnExtensionUnloaded( | 518 script_bubble_controller_->OnExtensionUnloaded( |
515 content::Details<extensions::UnloadedExtensionInfo>( | 519 content::Details<extensions::UnloadedExtensionInfo>( |
516 details)->extension->id()); | 520 details)->extension->id()); |
517 break; | 521 break; |
518 } | 522 } |
519 } | 523 } |
520 } | 524 } |
521 } | 525 } |
522 | 526 |
523 } // namespace extensions | 527 } // namespace extensions |
OLD | NEW |