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/api/declarative/rules_registry_service.h" | 8 #include "chrome/browser/extensions/api/declarative/rules_registry_service.h" |
9 #include "chrome/browser/extensions/api/declarative_content/content_rules_regist
ry.h" | 9 #include "chrome/browser/extensions/api/declarative_content/content_rules_regist
ry.h" |
10 #include "chrome/browser/extensions/app_notify_channel_ui.h" | |
11 #include "chrome/browser/extensions/crx_installer.h" | 10 #include "chrome/browser/extensions/crx_installer.h" |
12 #include "chrome/browser/extensions/extension_action.h" | 11 #include "chrome/browser/extensions/extension_action.h" |
13 #include "chrome/browser/extensions/extension_action_manager.h" | 12 #include "chrome/browser/extensions/extension_action_manager.h" |
14 #include "chrome/browser/extensions/extension_service.h" | 13 #include "chrome/browser/extensions/extension_service.h" |
15 #include "chrome/browser/extensions/extension_system.h" | 14 #include "chrome/browser/extensions/extension_system.h" |
16 #include "chrome/browser/extensions/extension_tab_util.h" | 15 #include "chrome/browser/extensions/extension_tab_util.h" |
17 #include "chrome/browser/extensions/image_loader.h" | 16 #include "chrome/browser/extensions/image_loader.h" |
18 #include "chrome/browser/extensions/page_action_controller.h" | 17 #include "chrome/browser/extensions/page_action_controller.h" |
19 #include "chrome/browser/extensions/script_badge_controller.h" | 18 #include "chrome/browser/extensions/script_badge_controller.h" |
20 #include "chrome/browser/extensions/script_bubble_controller.h" | 19 #include "chrome/browser/extensions/script_bubble_controller.h" |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 | 229 |
231 bool TabHelper::OnMessageReceived(const IPC::Message& message) { | 230 bool TabHelper::OnMessageReceived(const IPC::Message& message) { |
232 bool handled = true; | 231 bool handled = true; |
233 IPC_BEGIN_MESSAGE_MAP(TabHelper, message) | 232 IPC_BEGIN_MESSAGE_MAP(TabHelper, message) |
234 IPC_MESSAGE_HANDLER(ExtensionHostMsg_DidGetApplicationInfo, | 233 IPC_MESSAGE_HANDLER(ExtensionHostMsg_DidGetApplicationInfo, |
235 OnDidGetApplicationInfo) | 234 OnDidGetApplicationInfo) |
236 IPC_MESSAGE_HANDLER(ExtensionHostMsg_InstallApplication, | 235 IPC_MESSAGE_HANDLER(ExtensionHostMsg_InstallApplication, |
237 OnInstallApplication) | 236 OnInstallApplication) |
238 IPC_MESSAGE_HANDLER(ExtensionHostMsg_InlineWebstoreInstall, | 237 IPC_MESSAGE_HANDLER(ExtensionHostMsg_InlineWebstoreInstall, |
239 OnInlineWebstoreInstall) | 238 OnInlineWebstoreInstall) |
240 IPC_MESSAGE_HANDLER(ExtensionHostMsg_GetAppNotifyChannel, | |
241 OnGetAppNotifyChannel) | |
242 IPC_MESSAGE_HANDLER(ExtensionHostMsg_GetAppInstallState, | 239 IPC_MESSAGE_HANDLER(ExtensionHostMsg_GetAppInstallState, |
243 OnGetAppInstallState); | 240 OnGetAppInstallState); |
244 IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest) | 241 IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest) |
245 IPC_MESSAGE_HANDLER(ExtensionHostMsg_ContentScriptsExecuting, | 242 IPC_MESSAGE_HANDLER(ExtensionHostMsg_ContentScriptsExecuting, |
246 OnContentScriptsExecuting) | 243 OnContentScriptsExecuting) |
247 IPC_MESSAGE_HANDLER(ExtensionHostMsg_OnWatchedPageChange, | 244 IPC_MESSAGE_HANDLER(ExtensionHostMsg_OnWatchedPageChange, |
248 OnWatchedPageChange) | 245 OnWatchedPageChange) |
249 IPC_MESSAGE_UNHANDLED(handled = false) | 246 IPC_MESSAGE_UNHANDLED(handled = false) |
250 IPC_END_MESSAGE_MAP() | 247 IPC_END_MESSAGE_MAP() |
251 return handled; | 248 return handled; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 webstore_item_id, | 319 webstore_item_id, |
323 WebstoreStandaloneInstaller::REQUIRE_VERIFIED_SITE, | 320 WebstoreStandaloneInstaller::REQUIRE_VERIFIED_SITE, |
324 WebstoreStandaloneInstaller::INLINE_PROMPT, | 321 WebstoreStandaloneInstaller::INLINE_PROMPT, |
325 requestor_url, | 322 requestor_url, |
326 Profile::FromBrowserContext(web_contents()->GetBrowserContext()), | 323 Profile::FromBrowserContext(web_contents()->GetBrowserContext()), |
327 web_contents(), | 324 web_contents(), |
328 callback)); | 325 callback)); |
329 installer->BeginInstall(); | 326 installer->BeginInstall(); |
330 } | 327 } |
331 | 328 |
332 void TabHelper::OnGetAppNotifyChannel(const GURL& requestor_url, | |
333 const std::string& client_id, | |
334 int return_route_id, | |
335 int callback_id) { | |
336 // Check for permission first. | |
337 Profile* profile = | |
338 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | |
339 ExtensionService* extension_service = profile->GetExtensionService(); | |
340 ProcessMap* process_map = extension_service->process_map(); | |
341 content::RenderProcessHost* process = web_contents()->GetRenderProcessHost(); | |
342 const Extension* extension = | |
343 extension_service->GetInstalledApp(requestor_url); | |
344 | |
345 std::string error; | |
346 if (!extension || | |
347 !extension->HasAPIPermission(APIPermission::kAppNotifications) || | |
348 !process_map->Contains(extension->id(), process->GetID())) | |
349 error = kPermissionError; | |
350 | |
351 // Make sure the extension can cross to the main profile, if called from an | |
352 // an incognito window. | |
353 if (profile->IsOffTheRecord() && | |
354 !extension_service->CanCrossIncognito(extension)) | |
355 error = extension_misc::kAppNotificationsIncognitoError; | |
356 | |
357 if (!error.empty()) { | |
358 Send(new ExtensionMsg_GetAppNotifyChannelResponse( | |
359 return_route_id, "", error, callback_id)); | |
360 return; | |
361 } | |
362 | |
363 AppNotifyChannelUI* ui = AppNotifyChannelUI::Create( | |
364 profile, web_contents(), extension->name(), | |
365 AppNotifyChannelUI::NOTIFICATION_INFOBAR); | |
366 | |
367 scoped_refptr<AppNotifyChannelSetup> channel_setup( | |
368 new AppNotifyChannelSetup(profile, | |
369 extension->id(), | |
370 client_id, | |
371 requestor_url, | |
372 return_route_id, | |
373 callback_id, | |
374 ui, | |
375 this->AsWeakPtr())); | |
376 channel_setup->Start(); | |
377 // We'll get called back in AppNotifyChannelSetupComplete. | |
378 } | |
379 | |
380 void TabHelper::OnGetAppInstallState(const GURL& requestor_url, | 329 void TabHelper::OnGetAppInstallState(const GURL& requestor_url, |
381 int return_route_id, | 330 int return_route_id, |
382 int callback_id) { | 331 int callback_id) { |
383 Profile* profile = | 332 Profile* profile = |
384 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | 333 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
385 ExtensionService* extension_service = profile->GetExtensionService(); | 334 ExtensionService* extension_service = profile->GetExtensionService(); |
386 const ExtensionSet* extensions = extension_service->extensions(); | 335 const ExtensionSet* extensions = extension_service->extensions(); |
387 const ExtensionSet* disabled = extension_service->disabled_extensions(); | 336 const ExtensionSet* disabled = extension_service->disabled_extensions(); |
388 | 337 |
389 ExtensionURLInfo url(requestor_url); | 338 ExtensionURLInfo url(requestor_url); |
390 std::string state; | 339 std::string state; |
391 if (extensions->GetHostedAppByURL(url)) | 340 if (extensions->GetHostedAppByURL(url)) |
392 state = extension_misc::kAppStateInstalled; | 341 state = extension_misc::kAppStateInstalled; |
393 else if (disabled->GetHostedAppByURL(url)) | 342 else if (disabled->GetHostedAppByURL(url)) |
394 state = extension_misc::kAppStateDisabled; | 343 state = extension_misc::kAppStateDisabled; |
395 else | 344 else |
396 state = extension_misc::kAppStateNotInstalled; | 345 state = extension_misc::kAppStateNotInstalled; |
397 | 346 |
398 Send(new ExtensionMsg_GetAppInstallStateResponse( | 347 Send(new ExtensionMsg_GetAppInstallStateResponse( |
399 return_route_id, state, callback_id)); | 348 return_route_id, state, callback_id)); |
400 } | 349 } |
401 | 350 |
402 void TabHelper::AppNotifyChannelSetupComplete( | |
403 const std::string& channel_id, | |
404 const std::string& error, | |
405 const AppNotifyChannelSetup* setup) { | |
406 CHECK(setup); | |
407 | |
408 // If the setup was successful, record that fact in ExtensionService. | |
409 if (!channel_id.empty() && error.empty()) { | |
410 Profile* profile = | |
411 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | |
412 ExtensionService* service = profile->GetExtensionService(); | |
413 if (service->GetExtensionById(setup->extension_id(), true)) | |
414 service->SetAppNotificationSetupDone(setup->extension_id(), | |
415 setup->client_id()); | |
416 } | |
417 | |
418 Send(new ExtensionMsg_GetAppNotifyChannelResponse( | |
419 setup->return_route_id(), channel_id, error, setup->callback_id())); | |
420 } | |
421 | |
422 void TabHelper::OnRequest(const ExtensionHostMsg_Request_Params& request) { | 351 void TabHelper::OnRequest(const ExtensionHostMsg_Request_Params& request) { |
423 extension_function_dispatcher_.Dispatch(request, | 352 extension_function_dispatcher_.Dispatch(request, |
424 web_contents()->GetRenderViewHost()); | 353 web_contents()->GetRenderViewHost()); |
425 } | 354 } |
426 | 355 |
427 void TabHelper::OnContentScriptsExecuting( | 356 void TabHelper::OnContentScriptsExecuting( |
428 const ScriptExecutionObserver::ExecutingScriptsMap& executing_scripts_map, | 357 const ScriptExecutionObserver::ExecutingScriptsMap& executing_scripts_map, |
429 int32 on_page_id, | 358 int32 on_page_id, |
430 const GURL& on_url) { | 359 const GURL& on_url) { |
431 FOR_EACH_OBSERVER(ScriptExecutionObserver, script_execution_observers_, | 360 FOR_EACH_OBSERVER(ScriptExecutionObserver, script_execution_observers_, |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 script_bubble_controller_->OnExtensionUnloaded( | 476 script_bubble_controller_->OnExtensionUnloaded( |
548 content::Details<extensions::UnloadedExtensionInfo>( | 477 content::Details<extensions::UnloadedExtensionInfo>( |
549 details)->extension->id()); | 478 details)->extension->id()); |
550 break; | 479 break; |
551 } | 480 } |
552 } | 481 } |
553 } | 482 } |
554 } | 483 } |
555 | 484 |
556 } // namespace extensions | 485 } // namespace extensions |
OLD | NEW |