Chromium Code Reviews| 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 "base/logging.h" | 7 #include "base/logging.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 "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 77 profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), | 77 profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), |
| 78 extension_app_(NULL), | 78 extension_app_(NULL), |
| 79 pending_web_app_action_(NONE), | 79 pending_web_app_action_(NONE), |
| 80 last_committed_nav_entry_unique_id_(0), | 80 last_committed_nav_entry_unique_id_(0), |
| 81 update_shortcut_on_load_complete_(false), | 81 update_shortcut_on_load_complete_(false), |
| 82 script_executor_( | 82 script_executor_( |
| 83 new ScriptExecutor(web_contents, &script_execution_observers_)), | 83 new ScriptExecutor(web_contents, &script_execution_observers_)), |
| 84 location_bar_controller_(new LocationBarController(web_contents)), | 84 location_bar_controller_(new LocationBarController(web_contents)), |
| 85 extension_action_runner_(new ExtensionActionRunner(web_contents)), | 85 extension_action_runner_(new ExtensionActionRunner(web_contents)), |
| 86 webstore_inline_installer_factory_(new WebstoreInlineInstallerFactory()), | 86 webstore_inline_installer_factory_(new WebstoreInlineInstallerFactory()), |
| 87 registry_observer_(this), | |
| 87 image_loader_ptr_factory_(this), | 88 image_loader_ptr_factory_(this), |
| 88 weak_ptr_factory_(this) { | 89 weak_ptr_factory_(this) { |
| 89 // The ActiveTabPermissionManager requires a session ID; ensure this | 90 // The ActiveTabPermissionManager requires a session ID; ensure this |
| 90 // WebContents has one. | 91 // WebContents has one. |
| 91 SessionTabHelper::CreateForWebContents(web_contents); | 92 SessionTabHelper::CreateForWebContents(web_contents); |
| 92 // The Unretained() is safe because ForEachFrame is synchronous. | 93 // The Unretained() is safe because ForEachFrame is synchronous. |
| 93 web_contents->ForEachFrame( | 94 web_contents->ForEachFrame( |
| 94 base::Bind(&TabHelper::SetTabId, base::Unretained(this))); | 95 base::Bind(&TabHelper::SetTabId, base::Unretained(this))); |
| 95 active_tab_permission_granter_.reset(new ActiveTabPermissionGranter( | 96 active_tab_permission_granter_.reset(new ActiveTabPermissionGranter( |
| 96 web_contents, | 97 web_contents, |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 script_execution_observers_.RemoveObserver(observer); | 163 script_execution_observers_.RemoveObserver(observer); |
| 163 } | 164 } |
| 164 | 165 |
| 165 void TabHelper::SetExtensionApp(const Extension* extension) { | 166 void TabHelper::SetExtensionApp(const Extension* extension) { |
| 166 DCHECK(!extension || AppLaunchInfo::GetFullLaunchURL(extension).is_valid()); | 167 DCHECK(!extension || AppLaunchInfo::GetFullLaunchURL(extension).is_valid()); |
| 167 if (extension_app_ == extension) | 168 if (extension_app_ == extension) |
| 168 return; | 169 return; |
| 169 | 170 |
| 170 extension_app_ = extension; | 171 extension_app_ = extension; |
| 171 | 172 |
| 173 if (extension_app_) { | |
|
lazyboy
2016/06/03 01:43:56
lgtm given this is not true:
Is it possible that t
Devlin
2016/06/06 16:50:22
That flow might be able to happen (if e.g. you nav
lazyboy
2016/06/06 18:10:49
Acknowledged.
| |
| 174 registry_observer_.Add( | |
| 175 ExtensionRegistry::Get(web_contents()->GetBrowserContext())); | |
| 176 } | |
| 177 | |
| 172 UpdateExtensionAppIcon(extension_app_); | 178 UpdateExtensionAppIcon(extension_app_); |
| 173 | 179 |
| 174 content::NotificationService::current()->Notify( | 180 content::NotificationService::current()->Notify( |
| 175 chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED, | 181 chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED, |
| 176 content::Source<TabHelper>(this), | 182 content::Source<TabHelper>(this), |
| 177 content::NotificationService::NoDetails()); | 183 content::NotificationService::NoDetails()); |
| 178 } | 184 } |
| 179 | 185 |
| 180 void TabHelper::SetExtensionAppById(const std::string& extension_app_id) { | 186 void TabHelper::SetExtensionAppById(const std::string& extension_app_id) { |
| 181 const Extension* extension = GetExtension(extension_app_id); | 187 const Extension* extension = GetExtension(extension_app_id); |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 525 install_id, | 531 install_id, |
| 526 success, | 532 success, |
| 527 success ? std::string() : error, | 533 success ? std::string() : error, |
| 528 result)); | 534 result)); |
| 529 } | 535 } |
| 530 | 536 |
| 531 WebContents* TabHelper::GetAssociatedWebContents() const { | 537 WebContents* TabHelper::GetAssociatedWebContents() const { |
| 532 return web_contents(); | 538 return web_contents(); |
| 533 } | 539 } |
| 534 | 540 |
| 541 void TabHelper::OnExtensionUnloaded( | |
| 542 content::BrowserContext* browser_context, | |
| 543 const Extension* extension, | |
| 544 UnloadedExtensionInfo::Reason reason) { | |
| 545 DCHECK(extension_app_); | |
| 546 if (extension == extension_app_) { | |
| 547 SetExtensionApp(nullptr); | |
| 548 registry_observer_.RemoveAll(); | |
| 549 } | |
| 550 } | |
| 551 | |
| 535 void TabHelper::GetApplicationInfo(WebAppAction action) { | 552 void TabHelper::GetApplicationInfo(WebAppAction action) { |
| 536 NavigationEntry* entry = | 553 NavigationEntry* entry = |
| 537 web_contents()->GetController().GetLastCommittedEntry(); | 554 web_contents()->GetController().GetLastCommittedEntry(); |
| 538 if (!entry) | 555 if (!entry) |
| 539 return; | 556 return; |
| 540 | 557 |
| 541 pending_web_app_action_ = action; | 558 pending_web_app_action_ = action; |
| 542 last_committed_nav_entry_unique_id_ = entry->GetUniqueID(); | 559 last_committed_nav_entry_unique_id_ = entry->GetUniqueID(); |
| 543 | 560 |
| 544 Send(new ChromeViewMsg_GetWebApplicationInfo(routing_id())); | 561 Send(new ChromeViewMsg_GetWebApplicationInfo(routing_id())); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 563 } | 580 } |
| 564 } | 581 } |
| 565 | 582 |
| 566 void TabHelper::SetTabId(content::RenderFrameHost* render_frame_host) { | 583 void TabHelper::SetTabId(content::RenderFrameHost* render_frame_host) { |
| 567 render_frame_host->Send( | 584 render_frame_host->Send( |
| 568 new ExtensionMsg_SetTabId(render_frame_host->GetRoutingID(), | 585 new ExtensionMsg_SetTabId(render_frame_host->GetRoutingID(), |
| 569 SessionTabHelper::IdForTab(web_contents()))); | 586 SessionTabHelper::IdForTab(web_contents()))); |
| 570 } | 587 } |
| 571 | 588 |
| 572 } // namespace extensions | 589 } // namespace extensions |
| OLD | NEW |