| 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/navigation_observer.h" | 5 #include "chrome/browser/extensions/navigation_observer.h" |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/extension_install_ui.h" | 7 #include "chrome/browser/extensions/extension_install_ui.h" |
| 8 #include "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.h" |
| 9 #include "chrome/browser/extensions/extension_system.h" |
| 9 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| 10 #include "content/public/browser/navigation_controller.h" | 11 #include "content/public/browser/navigation_controller.h" |
| 11 #include "content/public/browser/navigation_entry.h" | 12 #include "content/public/browser/navigation_entry.h" |
| 12 #include "content/public/browser/notification_service.h" | 13 #include "content/public/browser/notification_service.h" |
| 13 #include "content/public/browser/notification_types.h" | 14 #include "content/public/browser/notification_types.h" |
| 14 | 15 |
| 15 using content::NavigationController; | 16 using content::NavigationController; |
| 16 using content::NavigationEntry; | 17 using content::NavigationEntry; |
| 17 | 18 |
| 18 namespace extensions { | 19 namespace extensions { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 48 void NavigationObserver::PromptToEnableExtensionIfNecessary( | 49 void NavigationObserver::PromptToEnableExtensionIfNecessary( |
| 49 NavigationController* nav_controller) { | 50 NavigationController* nav_controller) { |
| 50 // Bail out if we're already running a prompt. | 51 // Bail out if we're already running a prompt. |
| 51 if (!in_progress_prompt_extension_id_.empty()) | 52 if (!in_progress_prompt_extension_id_.empty()) |
| 52 return; | 53 return; |
| 53 | 54 |
| 54 NavigationEntry* nav_entry = nav_controller->GetActiveEntry(); | 55 NavigationEntry* nav_entry = nav_controller->GetActiveEntry(); |
| 55 if (!nav_entry) | 56 if (!nav_entry) |
| 56 return; | 57 return; |
| 57 | 58 |
| 58 ExtensionService* extension_service = profile_->GetExtensionService(); | 59 ExtensionService* extension_service = |
| 60 extensions::ExtensionSystem::Get(profile_)->extension_service(); |
| 59 const Extension* extension = extension_service->disabled_extensions()-> | 61 const Extension* extension = extension_service->disabled_extensions()-> |
| 60 GetExtensionOrAppByURL(ExtensionURLInfo(nav_entry->GetURL())); | 62 GetExtensionOrAppByURL(ExtensionURLInfo(nav_entry->GetURL())); |
| 61 if (!extension) | 63 if (!extension) |
| 62 return; | 64 return; |
| 63 | 65 |
| 64 // Try not to repeatedly prompt the user about the same extension. | 66 // Try not to repeatedly prompt the user about the same extension. |
| 65 if (prompted_extensions_.find(extension->id()) != prompted_extensions_.end()) | 67 if (prompted_extensions_.find(extension->id()) != prompted_extensions_.end()) |
| 66 return; | 68 return; |
| 67 prompted_extensions_.insert(extension->id()); | 69 prompted_extensions_.insert(extension->id()); |
| 68 | 70 |
| 69 ExtensionPrefs* extension_prefs = extension_service->extension_prefs(); | 71 ExtensionPrefs* extension_prefs = extension_service->extension_prefs(); |
| 70 if (extension_prefs->DidExtensionEscalatePermissions(extension->id())) { | 72 if (extension_prefs->DidExtensionEscalatePermissions(extension->id())) { |
| 71 // Keep track of the extension id and nav controller we're prompting for. | 73 // Keep track of the extension id and nav controller we're prompting for. |
| 72 // These must be reset in InstallUIProceed and InstallUIAbort. | 74 // These must be reset in InstallUIProceed and InstallUIAbort. |
| 73 in_progress_prompt_extension_id_ = extension->id(); | 75 in_progress_prompt_extension_id_ = extension->id(); |
| 74 in_progress_prompt_navigation_controller_ = nav_controller; | 76 in_progress_prompt_navigation_controller_ = nav_controller; |
| 75 | 77 |
| 76 extension_install_prompt_.reset( | 78 extension_install_prompt_.reset( |
| 77 new ExtensionInstallPrompt(nav_controller->GetWebContents())); | 79 new ExtensionInstallPrompt(nav_controller->GetWebContents())); |
| 78 extension_install_prompt_->ConfirmReEnable(this, extension); | 80 extension_install_prompt_->ConfirmReEnable(this, extension); |
| 79 } | 81 } |
| 80 } | 82 } |
| 81 | 83 |
| 82 void NavigationObserver::InstallUIProceed() { | 84 void NavigationObserver::InstallUIProceed() { |
| 83 ExtensionService* extension_service = profile_->GetExtensionService(); | 85 ExtensionService* extension_service = |
| 86 extensions::ExtensionSystem::Get(profile_)->extension_service(); |
| 84 const Extension* extension = extension_service->GetExtensionById( | 87 const Extension* extension = extension_service->GetExtensionById( |
| 85 in_progress_prompt_extension_id_, true); | 88 in_progress_prompt_extension_id_, true); |
| 86 NavigationController* nav_controller = | 89 NavigationController* nav_controller = |
| 87 in_progress_prompt_navigation_controller_; | 90 in_progress_prompt_navigation_controller_; |
| 88 CHECK(extension); | 91 CHECK(extension); |
| 89 CHECK(nav_controller); | 92 CHECK(nav_controller); |
| 90 | 93 |
| 91 in_progress_prompt_extension_id_ = ""; | 94 in_progress_prompt_extension_id_ = ""; |
| 92 in_progress_prompt_navigation_controller_ = NULL; | 95 in_progress_prompt_navigation_controller_ = NULL; |
| 93 bool record_oauth2_grant = extension_install_prompt_->record_oauth2_grant(); | 96 bool record_oauth2_grant = extension_install_prompt_->record_oauth2_grant(); |
| 94 extension_install_prompt_.reset(); | 97 extension_install_prompt_.reset(); |
| 95 | 98 |
| 96 // Grant permissions, re-enable the extension, and then reload the tab. | 99 // Grant permissions, re-enable the extension, and then reload the tab. |
| 97 extension_service->GrantPermissionsAndEnableExtension( | 100 extension_service->GrantPermissionsAndEnableExtension( |
| 98 extension, record_oauth2_grant); | 101 extension, record_oauth2_grant); |
| 99 nav_controller->Reload(true); | 102 nav_controller->Reload(true); |
| 100 } | 103 } |
| 101 | 104 |
| 102 void NavigationObserver::InstallUIAbort(bool user_initiated) { | 105 void NavigationObserver::InstallUIAbort(bool user_initiated) { |
| 103 ExtensionService* extension_service = profile_->GetExtensionService(); | 106 ExtensionService* extension_service = |
| 107 extensions::ExtensionSystem::Get(profile_)->extension_service(); |
| 104 const Extension* extension = extension_service->GetExtensionById( | 108 const Extension* extension = extension_service->GetExtensionById( |
| 105 in_progress_prompt_extension_id_, true); | 109 in_progress_prompt_extension_id_, true); |
| 106 | 110 |
| 107 in_progress_prompt_extension_id_ = ""; | 111 in_progress_prompt_extension_id_ = ""; |
| 108 in_progress_prompt_navigation_controller_ = NULL; | 112 in_progress_prompt_navigation_controller_ = NULL; |
| 109 extension_install_prompt_.reset(); | 113 extension_install_prompt_.reset(); |
| 110 | 114 |
| 111 std::string histogram_name = user_initiated ? | 115 std::string histogram_name = user_initiated ? |
| 112 "Extensions.Permissions_ReEnableCancel" : | 116 "Extensions.Permissions_ReEnableCancel" : |
| 113 "Extensions.Permissions_ReEnableAbort"; | 117 "Extensions.Permissions_ReEnableAbort"; |
| 114 ExtensionService::RecordPermissionMessagesHistogram( | 118 ExtensionService::RecordPermissionMessagesHistogram( |
| 115 extension, histogram_name.c_str()); | 119 extension, histogram_name.c_str()); |
| 116 } | 120 } |
| 117 | 121 |
| 118 } // namespace extensions | 122 } // namespace extensions |
| OLD | NEW |