Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: chrome/browser/extensions/extension_reenabler.cc

Issue 1534123002: [Extensions] Migrate ExtensionInstallPrompt::Delegate to be a callback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/extension_reenabler.h" 5 #include "chrome/browser/extensions/extension_reenabler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/extensions/extension_service.h" 8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/extensions/webstore_data_fetcher.h" 9 #include "chrome/browser/extensions/webstore_data_fetcher.h"
10 #include "chrome/browser/extensions/webstore_inline_installer.h" 10 #include "chrome/browser/extensions/webstore_inline_installer.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 const GURL& referrer_url, 63 const GURL& referrer_url,
64 const Callback& callback, 64 const Callback& callback,
65 content::WebContents* web_contents, 65 content::WebContents* web_contents,
66 const ExtensionInstallPrompt::ShowDialogCallback& show_dialog_callback) 66 const ExtensionInstallPrompt::ShowDialogCallback& show_dialog_callback)
67 : extension_(extension), 67 : extension_(extension),
68 browser_context_(browser_context), 68 browser_context_(browser_context),
69 referrer_url_(referrer_url), 69 referrer_url_(referrer_url),
70 callback_(callback), 70 callback_(callback),
71 show_dialog_callback_(show_dialog_callback), 71 show_dialog_callback_(show_dialog_callback),
72 finished_(false), 72 finished_(false),
73 registry_observer_(this) { 73 registry_observer_(this),
74 weak_factory_(this) {
74 DCHECK(extension_.get()); 75 DCHECK(extension_.get());
75 registry_observer_.Add(ExtensionRegistry::Get(browser_context_)); 76 registry_observer_.Add(ExtensionRegistry::Get(browser_context_));
76 77
77 install_prompt_.reset(new ExtensionInstallPrompt(web_contents)); 78 install_prompt_.reset(new ExtensionInstallPrompt(web_contents));
78 79
79 // If we have a non-empty referrer, then we have to validate that it's a valid 80 // If we have a non-empty referrer, then we have to validate that it's a valid
80 // url for the extension. 81 // url for the extension.
81 if (!referrer_url_.is_empty()) { 82 if (!referrer_url_.is_empty()) {
82 webstore_data_fetcher_.reset(new WebstoreDataFetcher( 83 webstore_data_fetcher_.reset(new WebstoreDataFetcher(
83 this, 84 this,
84 browser_context_->GetRequestContext(), 85 browser_context_->GetRequestContext(),
85 referrer_url_, 86 referrer_url_,
86 extension->id())); 87 extension->id()));
87 webstore_data_fetcher_->Start(); 88 webstore_data_fetcher_->Start();
88 } else { 89 } else {
89 ExtensionInstallPrompt::PromptType type = 90 ExtensionInstallPrompt::PromptType type =
90 ExtensionInstallPrompt::GetReEnablePromptTypeForExtension( 91 ExtensionInstallPrompt::GetReEnablePromptTypeForExtension(
91 browser_context, extension.get()); 92 browser_context, extension.get());
92 install_prompt_->ShowDialog( 93 install_prompt_->ShowDialog(
93 this, extension.get(), nullptr, 94 base::Bind(&ExtensionReenabler::OnInstallPromptDone,
95 weak_factory_.GetWeakPtr()),
96 extension.get(), nullptr,
94 make_scoped_ptr(new ExtensionInstallPrompt::Prompt(type)), 97 make_scoped_ptr(new ExtensionInstallPrompt::Prompt(type)),
95 show_dialog_callback_); 98 show_dialog_callback_);
96 } 99 }
97 } 100 }
98 101
99 void ExtensionReenabler::InstallUIProceed() { 102 void ExtensionReenabler::OnInstallPromptDone(
100 // Stop observing - we don't want to see our own enablement. 103 ExtensionInstallPrompt::Result install_result) {
101 registry_observer_.RemoveAll(); 104 ReenableResult result = ABORTED;
105 switch (install_result) {
106 case ExtensionInstallPrompt::Result::ACCEPTED: {
107 // Stop observing - we don't want to see our own enablement.
108 registry_observer_.RemoveAll();
102 109
103 ExtensionService* extension_service = 110 ExtensionService* extension_service =
104 ExtensionSystem::Get(browser_context_)->extension_service(); 111 ExtensionSystem::Get(browser_context_)->extension_service();
105 if (extension_service->browser_terminating()) { 112 if (extension_service->browser_terminating()) {
106 Finish(ABORTED); 113 result = ABORTED;
107 } else { 114 } else {
108 extension_service->GrantPermissionsAndEnableExtension(extension_.get()); 115 extension_service->GrantPermissionsAndEnableExtension(extension_.get());
109 // The re-enable could have failed if the extension is disallowed by 116 // The re-enable could have failed if the extension is disallowed by
110 // policy. 117 // policy.
111 bool enabled = ExtensionRegistry::Get(browser_context_)-> 118 bool enabled = ExtensionRegistry::Get(browser_context_)
112 enabled_extensions().GetByID(extension_->id()) != nullptr; 119 ->enabled_extensions()
113 Finish(enabled ? REENABLE_SUCCESS : NOT_ALLOWED); 120 .GetByID(extension_->id()) != nullptr;
121 result = enabled ? REENABLE_SUCCESS : NOT_ALLOWED;
122 }
123 break;
124 }
125 case ExtensionInstallPrompt::Result::USER_CANCELED:
126 result = USER_CANCELED;
127 break;
128 case ExtensionInstallPrompt::Result::ABORTED:
129 result = ABORTED;
130 break;
114 } 131 }
115 }
116 132
117 void ExtensionReenabler::InstallUIAbort(bool user_initiated) { 133 Finish(result);
118 Finish(user_initiated ? USER_CANCELED : ABORTED);
119 } 134 }
120 135
121 void ExtensionReenabler::OnExtensionLoaded( 136 void ExtensionReenabler::OnExtensionLoaded(
122 content::BrowserContext* browser_context, 137 content::BrowserContext* browser_context,
123 const Extension* extension) { 138 const Extension* extension) {
124 // If the user chose to manually re-enable the extension then, for all 139 // If the user chose to manually re-enable the extension then, for all
125 // intents and purposes, this was a success. 140 // intents and purposes, this was a success.
126 if (extension == extension_.get()) 141 if (extension == extension_.get())
127 Finish(REENABLE_SUCCESS); 142 Finish(REENABLE_SUCCESS);
128 } 143 }
(...skipping 16 matching lines...) Expand all
145 std::string error; 160 std::string error;
146 if (!WebstoreInlineInstaller::IsRequestorPermitted(*webstore_data, 161 if (!WebstoreInlineInstaller::IsRequestorPermitted(*webstore_data,
147 referrer_url_, 162 referrer_url_,
148 &error)) { 163 &error)) {
149 Finish(NOT_ALLOWED); 164 Finish(NOT_ALLOWED);
150 } else { 165 } else {
151 ExtensionInstallPrompt::PromptType type = 166 ExtensionInstallPrompt::PromptType type =
152 ExtensionInstallPrompt::GetReEnablePromptTypeForExtension( 167 ExtensionInstallPrompt::GetReEnablePromptTypeForExtension(
153 browser_context_, extension_.get()); 168 browser_context_, extension_.get());
154 install_prompt_->ShowDialog( 169 install_prompt_->ShowDialog(
155 this, extension_.get(), nullptr, 170 base::Bind(&ExtensionReenabler::OnInstallPromptDone,
171 weak_factory_.GetWeakPtr()),
172 extension_.get(), nullptr,
156 make_scoped_ptr(new ExtensionInstallPrompt::Prompt(type)), 173 make_scoped_ptr(new ExtensionInstallPrompt::Prompt(type)),
157 show_dialog_callback_); 174 show_dialog_callback_);
158 } 175 }
159 } 176 }
160 177
161 void ExtensionReenabler::OnWebstoreResponseParseFailure( 178 void ExtensionReenabler::OnWebstoreResponseParseFailure(
162 const std::string& error) { 179 const std::string& error) {
163 Finish(ABORTED); 180 Finish(ABORTED);
164 } 181 }
165 182
166 void ExtensionReenabler::Finish(ReenableResult result) { 183 void ExtensionReenabler::Finish(ReenableResult result) {
167 DCHECK(!finished_); 184 DCHECK(!finished_);
168 finished_ = true; 185 finished_ = true;
169 registry_observer_.RemoveAll(); 186 registry_observer_.RemoveAll();
170 callback_.Run(result); 187 callback_.Run(result);
171 } 188 }
172 189
173 } // namespace extensions 190 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_reenabler.h ('k') | chrome/browser/extensions/extension_reenabler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698