| 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/command_line.h" | 7 #include "base/command_line.h" | 
| 8 #include "base/logging.h" | 8 #include "base/logging.h" | 
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" | 
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 115     SetTabId(web_contents->GetRenderViewHost()); | 115     SetTabId(web_contents->GetRenderViewHost()); | 
| 116   active_tab_permission_granter_.reset(new ActiveTabPermissionGranter( | 116   active_tab_permission_granter_.reset(new ActiveTabPermissionGranter( | 
| 117       web_contents, | 117       web_contents, | 
| 118       SessionID::IdForTab(web_contents), | 118       SessionID::IdForTab(web_contents), | 
| 119       Profile::FromBrowserContext(web_contents->GetBrowserContext()))); | 119       Profile::FromBrowserContext(web_contents->GetBrowserContext()))); | 
| 120 | 120 | 
| 121   // If more classes need to listen to global content script activity, then | 121   // If more classes need to listen to global content script activity, then | 
| 122   // a separate routing class with an observer interface should be written. | 122   // a separate routing class with an observer interface should be written. | 
| 123   profile_ = Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 123   profile_ = Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 
| 124 | 124 | 
| 125 #if defined(ENABLE_EXTENSIONS) |  | 
| 126   AddScriptExecutionObserver(ActivityLog::GetInstance(profile_)); | 125   AddScriptExecutionObserver(ActivityLog::GetInstance(profile_)); | 
| 127 #endif |  | 
| 128 | 126 | 
| 129   registrar_.Add(this, | 127   registrar_.Add(this, | 
| 130                  content::NOTIFICATION_LOAD_STOP, | 128                  content::NOTIFICATION_LOAD_STOP, | 
| 131                  content::Source<NavigationController>( | 129                  content::Source<NavigationController>( | 
| 132                      &web_contents->GetController())); | 130                      &web_contents->GetController())); | 
| 133 } | 131 } | 
| 134 | 132 | 
| 135 TabHelper::~TabHelper() { | 133 TabHelper::~TabHelper() { | 
| 136 #if defined(ENABLE_EXTENSIONS) |  | 
| 137   RemoveScriptExecutionObserver(ActivityLog::GetInstance(profile_)); | 134   RemoveScriptExecutionObserver(ActivityLog::GetInstance(profile_)); | 
| 138 #endif |  | 
| 139 } | 135 } | 
| 140 | 136 | 
| 141 void TabHelper::CreateApplicationShortcuts() { | 137 void TabHelper::CreateApplicationShortcuts() { | 
| 142   DCHECK(CanCreateApplicationShortcuts()); | 138   DCHECK(CanCreateApplicationShortcuts()); | 
| 143   NavigationEntry* entry = | 139   NavigationEntry* entry = | 
| 144       web_contents()->GetController().GetLastCommittedEntry(); | 140       web_contents()->GetController().GetLastCommittedEntry(); | 
| 145   if (!entry) | 141   if (!entry) | 
| 146     return; | 142     return; | 
| 147 | 143 | 
| 148   pending_web_app_action_ = CREATE_SHORTCUT; | 144   pending_web_app_action_ = CREATE_SHORTCUT; | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 224   pending_web_app_action_ = NONE; | 220   pending_web_app_action_ = NONE; | 
| 225 | 221 | 
| 226   // There was an error with downloading the icons or installing the app. | 222   // There was an error with downloading the icons or installing the app. | 
| 227   if (!extension) | 223   if (!extension) | 
| 228     return; | 224     return; | 
| 229 | 225 | 
| 230 #if defined(OS_CHROMEOS) | 226 #if defined(OS_CHROMEOS) | 
| 231   ChromeLauncherController::instance()->PinAppWithID(extension->id()); | 227   ChromeLauncherController::instance()->PinAppWithID(extension->id()); | 
| 232 #endif | 228 #endif | 
| 233 | 229 | 
| 234 // Android does not implement browser_finder.cc. |  | 
| 235 #if !defined(OS_ANDROID) |  | 
| 236   Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | 230   Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | 
| 237   if (browser) { | 231   if (browser) { | 
| 238     browser->window()->ShowBookmarkAppBubble(web_app_info, extension->id()); | 232     browser->window()->ShowBookmarkAppBubble(web_app_info, extension->id()); | 
| 239   } | 233   } | 
| 240 #endif |  | 
| 241 } | 234 } | 
| 242 | 235 | 
| 243 void TabHelper::RenderViewCreated(RenderViewHost* render_view_host) { | 236 void TabHelper::RenderViewCreated(RenderViewHost* render_view_host) { | 
| 244   SetTabId(render_view_host); | 237   SetTabId(render_view_host); | 
| 245 } | 238 } | 
| 246 | 239 | 
| 247 void TabHelper::DidNavigateMainFrame( | 240 void TabHelper::DidNavigateMainFrame( | 
| 248     const content::LoadCommittedDetails& details, | 241     const content::LoadCommittedDetails& details, | 
| 249     const content::FrameNavigateParams& params) { | 242     const content::FrameNavigateParams& params) { | 
| 250 #if defined(ENABLE_EXTENSIONS) |  | 
| 251   if (ExtensionSystem::Get(profile_)->extension_service() && | 243   if (ExtensionSystem::Get(profile_)->extension_service() && | 
| 252       RulesRegistryService::Get(profile_)) { | 244       RulesRegistryService::Get(profile_)) { | 
| 253     RulesRegistryService::Get(profile_)->content_rules_registry()-> | 245     RulesRegistryService::Get(profile_)->content_rules_registry()-> | 
| 254         DidNavigateMainFrame(web_contents(), details, params); | 246         DidNavigateMainFrame(web_contents(), details, params); | 
| 255   } | 247   } | 
| 256 #endif  // defined(ENABLE_EXTENSIONS) |  | 
| 257 | 248 | 
| 258   content::BrowserContext* context = web_contents()->GetBrowserContext(); | 249   content::BrowserContext* context = web_contents()->GetBrowserContext(); | 
| 259   ExtensionRegistry* registry = ExtensionRegistry::Get(context); | 250   ExtensionRegistry* registry = ExtensionRegistry::Get(context); | 
| 260   const ExtensionSet& enabled_extensions = registry->enabled_extensions(); | 251   const ExtensionSet& enabled_extensions = registry->enabled_extensions(); | 
| 261 | 252 | 
| 262   if (CommandLine::ForCurrentProcess()->HasSwitch( | 253   if (CommandLine::ForCurrentProcess()->HasSwitch( | 
| 263           switches::kEnableStreamlinedHostedApps)) { | 254           switches::kEnableStreamlinedHostedApps)) { | 
| 264 #if !defined(OS_ANDROID) |  | 
| 265     Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | 255     Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | 
| 266     if (browser && browser->is_app()) { | 256     if (browser && browser->is_app()) { | 
| 267       SetExtensionApp(registry->GetExtensionById( | 257       SetExtensionApp(registry->GetExtensionById( | 
| 268           web_app::GetExtensionIdFromApplicationName(browser->app_name()), | 258           web_app::GetExtensionIdFromApplicationName(browser->app_name()), | 
| 269           ExtensionRegistry::EVERYTHING)); | 259           ExtensionRegistry::EVERYTHING)); | 
| 270     } else { | 260     } else { | 
| 271       UpdateExtensionAppIcon( | 261       UpdateExtensionAppIcon( | 
| 272           enabled_extensions.GetExtensionOrAppByURL(params.url)); | 262           enabled_extensions.GetExtensionOrAppByURL(params.url)); | 
| 273     } | 263     } | 
| 274 #endif |  | 
| 275   } else { | 264   } else { | 
| 276     UpdateExtensionAppIcon( | 265     UpdateExtensionAppIcon( | 
| 277         enabled_extensions.GetExtensionOrAppByURL(params.url)); | 266         enabled_extensions.GetExtensionOrAppByURL(params.url)); | 
| 278   } | 267   } | 
| 279 | 268 | 
| 280   if (details.is_in_page) | 269   if (details.is_in_page) | 
| 281     return; | 270     return; | 
| 282 | 271 | 
| 283   ExtensionActionManager* extension_action_manager = | 272   ExtensionActionManager* extension_action_manager = | 
| 284       ExtensionActionManager::Get(Profile::FromBrowserContext(context)); | 273       ExtensionActionManager::Get(Profile::FromBrowserContext(context)); | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 311                         OnContentScriptsExecuting) | 300                         OnContentScriptsExecuting) | 
| 312     IPC_MESSAGE_HANDLER(ExtensionHostMsg_OnWatchedPageChange, | 301     IPC_MESSAGE_HANDLER(ExtensionHostMsg_OnWatchedPageChange, | 
| 313                         OnWatchedPageChange) | 302                         OnWatchedPageChange) | 
| 314     IPC_MESSAGE_UNHANDLED(handled = false) | 303     IPC_MESSAGE_UNHANDLED(handled = false) | 
| 315   IPC_END_MESSAGE_MAP() | 304   IPC_END_MESSAGE_MAP() | 
| 316   return handled; | 305   return handled; | 
| 317 } | 306 } | 
| 318 | 307 | 
| 319 bool TabHelper::OnMessageReceived(const IPC::Message& message, | 308 bool TabHelper::OnMessageReceived(const IPC::Message& message, | 
| 320                                   content::RenderFrameHost* render_frame_host) { | 309                                   content::RenderFrameHost* render_frame_host) { | 
| 321 #if defined(ENABLE_EXTENSIONS) |  | 
| 322   bool handled = true; | 310   bool handled = true; | 
| 323   IPC_BEGIN_MESSAGE_MAP(TabHelper, message) | 311   IPC_BEGIN_MESSAGE_MAP(TabHelper, message) | 
| 324     IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DetailedConsoleMessageAdded, | 312     IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DetailedConsoleMessageAdded, | 
| 325                         OnDetailedConsoleMessageAdded) | 313                         OnDetailedConsoleMessageAdded) | 
| 326     IPC_MESSAGE_UNHANDLED(handled = false) | 314     IPC_MESSAGE_UNHANDLED(handled = false) | 
| 327   IPC_END_MESSAGE_MAP() | 315   IPC_END_MESSAGE_MAP() | 
| 328 #else |  | 
| 329   bool handled = false; |  | 
| 330 #endif |  | 
| 331   return handled; | 316   return handled; | 
| 332 } | 317 } | 
| 333 | 318 | 
| 334 void TabHelper::DidCloneToNewWebContents(WebContents* old_web_contents, | 319 void TabHelper::DidCloneToNewWebContents(WebContents* old_web_contents, | 
| 335                                          WebContents* new_web_contents) { | 320                                          WebContents* new_web_contents) { | 
| 336   // When the WebContents that this is attached to is cloned, give the new clone | 321   // When the WebContents that this is attached to is cloned, give the new clone | 
| 337   // a TabHelper and copy state over. | 322   // a TabHelper and copy state over. | 
| 338   CreateForWebContents(new_web_contents); | 323   CreateForWebContents(new_web_contents); | 
| 339   TabHelper* new_helper = FromWebContents(new_web_contents); | 324   TabHelper* new_helper = FromWebContents(new_web_contents); | 
| 340 | 325 | 
| 341   new_helper->SetExtensionApp(extension_app()); | 326   new_helper->SetExtensionApp(extension_app()); | 
| 342   new_helper->extension_app_icon_ = extension_app_icon_; | 327   new_helper->extension_app_icon_ = extension_app_icon_; | 
| 343 } | 328 } | 
| 344 | 329 | 
| 345 void TabHelper::OnDidGetApplicationInfo(int32 page_id, | 330 void TabHelper::OnDidGetApplicationInfo(int32 page_id, | 
| 346                                         const WebApplicationInfo& info) { | 331                                         const WebApplicationInfo& info) { | 
| 347   // Android does not implement BrowserWindow. | 332 #if !defined(OS_MACOSX) | 
| 348 #if !defined(OS_MACOSX) && !defined(OS_ANDROID) |  | 
| 349   web_app_info_ = info; | 333   web_app_info_ = info; | 
| 350 | 334 | 
| 351   NavigationEntry* entry = | 335   NavigationEntry* entry = | 
| 352       web_contents()->GetController().GetLastCommittedEntry(); | 336       web_contents()->GetController().GetLastCommittedEntry(); | 
| 353   if (!entry || (entry->GetPageID() != page_id)) | 337   if (!entry || (entry->GetPageID() != page_id)) | 
| 354     return; | 338     return; | 
| 355 | 339 | 
| 356   switch (pending_web_app_action_) { | 340   switch (pending_web_app_action_) { | 
| 357     case CREATE_SHORTCUT: { | 341     case CREATE_SHORTCUT: { | 
| 358       chrome::ShowCreateWebAppShortcutsDialog( | 342       chrome::ShowCreateWebAppShortcutsDialog( | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 389   if (pending_web_app_action_ != CREATE_HOSTED_APP) | 373   if (pending_web_app_action_ != CREATE_HOSTED_APP) | 
| 390     pending_web_app_action_ = NONE; | 374     pending_web_app_action_ = NONE; | 
| 391 #endif | 375 #endif | 
| 392 } | 376 } | 
| 393 | 377 | 
| 394 void TabHelper::OnInlineWebstoreInstall(int install_id, | 378 void TabHelper::OnInlineWebstoreInstall(int install_id, | 
| 395                                         int return_route_id, | 379                                         int return_route_id, | 
| 396                                         const std::string& webstore_item_id, | 380                                         const std::string& webstore_item_id, | 
| 397                                         const GURL& requestor_url, | 381                                         const GURL& requestor_url, | 
| 398                                         int listeners_mask) { | 382                                         int listeners_mask) { | 
| 399 #if defined(ENABLE_EXTENSIONS) |  | 
| 400   // Check that the listener is reasonable. We should never get anything other | 383   // Check that the listener is reasonable. We should never get anything other | 
| 401   // than an install stage listener, a download listener, or both. | 384   // than an install stage listener, a download listener, or both. | 
| 402   if ((listeners_mask & ~(api::webstore::INSTALL_STAGE_LISTENER | | 385   if ((listeners_mask & ~(api::webstore::INSTALL_STAGE_LISTENER | | 
| 403                           api::webstore::DOWNLOAD_PROGRESS_LISTENER)) != 0) { | 386                           api::webstore::DOWNLOAD_PROGRESS_LISTENER)) != 0) { | 
| 404     NOTREACHED(); | 387     NOTREACHED(); | 
| 405     return; | 388     return; | 
| 406   } | 389   } | 
| 407   // Inform the Webstore API that an inline install is happening, in case the | 390   // Inform the Webstore API that an inline install is happening, in case the | 
| 408   // page requested status updates. | 391   // page requested status updates. | 
| 409   Profile* profile = | 392   Profile* profile = | 
| 410       Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | 393       Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | 
| 411   WebstoreAPI::Get(profile)->OnInlineInstallStart( | 394   WebstoreAPI::Get(profile)->OnInlineInstallStart( | 
| 412       return_route_id, this, webstore_item_id, listeners_mask); | 395       return_route_id, this, webstore_item_id, listeners_mask); | 
| 413 #endif |  | 
| 414 | 396 | 
| 415   WebstoreStandaloneInstaller::Callback callback = | 397   WebstoreStandaloneInstaller::Callback callback = | 
| 416       base::Bind(&TabHelper::OnInlineInstallComplete, base::Unretained(this), | 398       base::Bind(&TabHelper::OnInlineInstallComplete, base::Unretained(this), | 
| 417                  install_id, return_route_id); | 399                  install_id, return_route_id); | 
| 418   scoped_refptr<WebstoreInlineInstaller> installer( | 400   scoped_refptr<WebstoreInlineInstaller> installer( | 
| 419       webstore_inline_installer_factory_->CreateInstaller( | 401       webstore_inline_installer_factory_->CreateInstaller( | 
| 420           web_contents(), | 402           web_contents(), | 
| 421           webstore_item_id, | 403           webstore_item_id, | 
| 422           requestor_url, | 404           requestor_url, | 
| 423           callback)); | 405           callback)); | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 455     const GURL& on_url) { | 437     const GURL& on_url) { | 
| 456   FOR_EACH_OBSERVER(ScriptExecutionObserver, script_execution_observers_, | 438   FOR_EACH_OBSERVER(ScriptExecutionObserver, script_execution_observers_, | 
| 457                     OnScriptsExecuted(web_contents(), | 439                     OnScriptsExecuted(web_contents(), | 
| 458                                       executing_scripts_map, | 440                                       executing_scripts_map, | 
| 459                                       on_page_id, | 441                                       on_page_id, | 
| 460                                       on_url)); | 442                                       on_url)); | 
| 461 } | 443 } | 
| 462 | 444 | 
| 463 void TabHelper::OnWatchedPageChange( | 445 void TabHelper::OnWatchedPageChange( | 
| 464     const std::vector<std::string>& css_selectors) { | 446     const std::vector<std::string>& css_selectors) { | 
| 465 #if defined(ENABLE_EXTENSIONS) |  | 
| 466   if (ExtensionSystem::Get(profile_)->extension_service() && | 447   if (ExtensionSystem::Get(profile_)->extension_service() && | 
| 467       RulesRegistryService::Get(profile_)) { | 448       RulesRegistryService::Get(profile_)) { | 
| 468     RulesRegistryService::Get(profile_)->content_rules_registry()->Apply( | 449     RulesRegistryService::Get(profile_)->content_rules_registry()->Apply( | 
| 469         web_contents(), css_selectors); | 450         web_contents(), css_selectors); | 
| 470   } | 451   } | 
| 471 #endif  // defined(ENABLE_EXTENSIONS) |  | 
| 472 } | 452 } | 
| 473 | 453 | 
| 474 void TabHelper::OnDetailedConsoleMessageAdded( | 454 void TabHelper::OnDetailedConsoleMessageAdded( | 
| 475     const base::string16& message, | 455     const base::string16& message, | 
| 476     const base::string16& source, | 456     const base::string16& source, | 
| 477     const StackTrace& stack_trace, | 457     const StackTrace& stack_trace, | 
| 478     int32 severity_level) { | 458     int32 severity_level) { | 
| 479 #if defined(ENABLE_EXTENSIONS) |  | 
| 480   if (IsSourceFromAnExtension(source)) { | 459   if (IsSourceFromAnExtension(source)) { | 
| 481     content::RenderViewHost* rvh = web_contents()->GetRenderViewHost(); | 460     content::RenderViewHost* rvh = web_contents()->GetRenderViewHost(); | 
| 482     ErrorConsole::Get(profile_)->ReportError( | 461     ErrorConsole::Get(profile_)->ReportError( | 
| 483         scoped_ptr<ExtensionError>(new RuntimeError( | 462         scoped_ptr<ExtensionError>(new RuntimeError( | 
| 484             extension_app_ ? extension_app_->id() : std::string(), | 463             extension_app_ ? extension_app_->id() : std::string(), | 
| 485             profile_->IsOffTheRecord(), | 464             profile_->IsOffTheRecord(), | 
| 486             source, | 465             source, | 
| 487             message, | 466             message, | 
| 488             stack_trace, | 467             stack_trace, | 
| 489             web_contents() ? | 468             web_contents() ? | 
| 490                 web_contents()->GetLastCommittedURL() : GURL::EmptyGURL(), | 469                 web_contents()->GetLastCommittedURL() : GURL::EmptyGURL(), | 
| 491             static_cast<logging::LogSeverity>(severity_level), | 470             static_cast<logging::LogSeverity>(severity_level), | 
| 492             rvh->GetRoutingID(), | 471             rvh->GetRoutingID(), | 
| 493             rvh->GetProcess()->GetID()))); | 472             rvh->GetProcess()->GetID()))); | 
| 494   } | 473   } | 
| 495 #endif |  | 
| 496 } | 474 } | 
| 497 | 475 | 
| 498 const Extension* TabHelper::GetExtension(const std::string& extension_app_id) { | 476 const Extension* TabHelper::GetExtension(const std::string& extension_app_id) { | 
| 499   if (extension_app_id.empty()) | 477   if (extension_app_id.empty()) | 
| 500     return NULL; | 478     return NULL; | 
| 501 | 479 | 
| 502   Profile* profile = | 480   Profile* profile = | 
| 503       Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | 481       Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | 
| 504   ExtensionService* extension_service = profile->GetExtensionService(); | 482   ExtensionService* extension_service = profile->GetExtensionService(); | 
| 505   if (!extension_service || !extension_service->is_ready()) | 483   if (!extension_service || !extension_service->is_ready()) | 
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 594   } | 572   } | 
| 595 } | 573 } | 
| 596 | 574 | 
| 597 void TabHelper::SetTabId(RenderViewHost* render_view_host) { | 575 void TabHelper::SetTabId(RenderViewHost* render_view_host) { | 
| 598   render_view_host->Send( | 576   render_view_host->Send( | 
| 599       new ExtensionMsg_SetTabId(render_view_host->GetRoutingID(), | 577       new ExtensionMsg_SetTabId(render_view_host->GetRoutingID(), | 
| 600                                 SessionID::IdForTab(web_contents()))); | 578                                 SessionID::IdForTab(web_contents()))); | 
| 601 } | 579 } | 
| 602 | 580 | 
| 603 }  // namespace extensions | 581 }  // namespace extensions | 
| OLD | NEW | 
|---|