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

Side by Side Diff: chrome/browser/extensions/external_install_error.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/external_install_error.h" 5 #include "chrome/browser/extensions/external_install_error.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 253
254 base::string16 ExternalInstallBubbleAlert::GetBubbleViewCancelButtonLabel() { 254 base::string16 ExternalInstallBubbleAlert::GetBubbleViewCancelButtonLabel() {
255 return prompt_->GetAbortButtonLabel(); 255 return prompt_->GetAbortButtonLabel();
256 } 256 }
257 257
258 void ExternalInstallBubbleAlert::OnBubbleViewDidClose(Browser* browser) { 258 void ExternalInstallBubbleAlert::OnBubbleViewDidClose(Browser* browser) {
259 } 259 }
260 260
261 void ExternalInstallBubbleAlert::BubbleViewAcceptButtonPressed( 261 void ExternalInstallBubbleAlert::BubbleViewAcceptButtonPressed(
262 Browser* browser) { 262 Browser* browser) {
263 error_->InstallUIProceed(); 263 error_->OnInstallPromptDone(ExtensionInstallPrompt::Result::ACCEPTED);
264 } 264 }
265 265
266 void ExternalInstallBubbleAlert::BubbleViewCancelButtonPressed( 266 void ExternalInstallBubbleAlert::BubbleViewCancelButtonPressed(
267 Browser* browser) { 267 Browser* browser) {
268 error_->InstallUIAbort(true); 268 error_->OnInstallPromptDone(ExtensionInstallPrompt::Result::USER_CANCELED);
269 } 269 }
270 270
271 } // namespace 271 } // namespace
272 272
273 //////////////////////////////////////////////////////////////////////////////// 273 ////////////////////////////////////////////////////////////////////////////////
274 // ExternalInstallError 274 // ExternalInstallError
275 275
276 ExternalInstallError::ExternalInstallError( 276 ExternalInstallError::ExternalInstallError(
277 content::BrowserContext* browser_context, 277 content::BrowserContext* browser_context,
278 const std::string& extension_id, 278 const std::string& extension_id,
(...skipping 12 matching lines...) Expand all
291 webstore_data_fetcher_.reset(new WebstoreDataFetcher( 291 webstore_data_fetcher_.reset(new WebstoreDataFetcher(
292 this, browser_context_->GetRequestContext(), GURL(), extension_id_)); 292 this, browser_context_->GetRequestContext(), GURL(), extension_id_));
293 webstore_data_fetcher_->Start(); 293 webstore_data_fetcher_->Start();
294 } 294 }
295 295
296 ExternalInstallError::~ExternalInstallError() { 296 ExternalInstallError::~ExternalInstallError() {
297 if (global_error_.get()) 297 if (global_error_.get())
298 error_service_->RemoveGlobalError(global_error_.get()); 298 error_service_->RemoveGlobalError(global_error_.get());
299 } 299 }
300 300
301 void ExternalInstallError::InstallUIProceed() { 301 void ExternalInstallError::OnInstallPromptDone(
302 ExtensionInstallPrompt::Result result) {
302 const Extension* extension = GetExtension(); 303 const Extension* extension = GetExtension();
303 if (extension) { 304 bool did_remove_error = false;
304 ExtensionSystem::Get(browser_context_) 305 switch (result) {
305 ->extension_service() 306 case ExtensionInstallPrompt::Result::ACCEPTED:
306 ->GrantPermissionsAndEnableExtension(extension); 307 if (extension) {
307 // Since the manager listens for the extension to be loaded, this will 308 ExtensionSystem::Get(browser_context_)
308 // remove the error... 309 ->extension_service()
309 } else { 310 ->GrantPermissionsAndEnableExtension(extension);
310 // ... Otherwise we have to do it explicitly. 311 // Since the manager listens for the extension to be loaded, this will
312 // remove the error.
313 did_remove_error = true;
314 }
315 break;
316 case ExtensionInstallPrompt::Result::USER_CANCELED:
317 if (extension) {
318 ExtensionSystem::Get(browser_context_)
319 ->extension_service()
320 ->UninstallExtension(extension_id_,
321 extensions::UNINSTALL_REASON_INSTALL_CANCELED,
322 base::Bind(&base::DoNothing),
323 nullptr); // Ignore error.
324 did_remove_error = true;
325 }
326 break;
327 case ExtensionInstallPrompt::Result::ABORTED:
328 break;
329 }
330 if (!did_remove_error)
311 manager_->RemoveExternalInstallError(); 331 manager_->RemoveExternalInstallError();
312 }
313 }
314
315 void ExternalInstallError::InstallUIAbort(bool user_initiated) {
316 if (user_initiated && GetExtension()) {
317 ExtensionSystem::Get(browser_context_)
318 ->extension_service()
319 ->UninstallExtension(extension_id_,
320 extensions::UNINSTALL_REASON_INSTALL_CANCELED,
321 base::Bind(&base::DoNothing),
322 NULL); // Ignore error.
323 // Since the manager listens for the extension to be removed, this will
324 // remove the error...
325 } else {
326 // ... Otherwise we have to do it explicitly.
327 manager_->RemoveExternalInstallError();
328 }
329 } 332 }
330 333
331 void ExternalInstallError::ShowDialog(Browser* browser) { 334 void ExternalInstallError::ShowDialog(Browser* browser) {
332 DCHECK(install_ui_.get()); 335 DCHECK(install_ui_.get());
333 DCHECK(prompt_.get()); 336 DCHECK(prompt_.get());
334 DCHECK(browser); 337 DCHECK(browser);
335 content::WebContents* web_contents = NULL; 338 content::WebContents* web_contents = NULL;
336 web_contents = browser->tab_strip_model()->GetActiveWebContents(); 339 web_contents = browser->tab_strip_model()->GetActiveWebContents();
337 install_ui_show_params_.reset( 340 install_ui_show_params_.reset(
338 new ExtensionInstallPromptShowParams(web_contents)); 341 new ExtensionInstallPromptShowParams(web_contents));
339 ExtensionInstallPrompt::GetDefaultShowDialogCallback().Run( 342 ExtensionInstallPrompt::GetDefaultShowDialogCallback().Run(
340 install_ui_show_params_.get(), this, std::move(prompt_)); 343 install_ui_show_params_.get(),
344 base::Bind(&ExternalInstallError::OnInstallPromptDone,
345 weak_factory_.GetWeakPtr()),
346 std::move(prompt_));
341 } 347 }
342 348
343 const Extension* ExternalInstallError::GetExtension() const { 349 const Extension* ExternalInstallError::GetExtension() const {
344 return ExtensionRegistry::Get(browser_context_) 350 return ExtensionRegistry::Get(browser_context_)
345 ->GetExtensionById(extension_id_, ExtensionRegistry::EVERYTHING); 351 ->GetExtensionById(extension_id_, ExtensionRegistry::EVERYTHING);
346 } 352 }
347 353
348 void ExternalInstallError::OnWebstoreRequestFailure() { 354 void ExternalInstallError::OnWebstoreRequestFailure() {
349 OnFetchComplete(); 355 OnFetchComplete();
350 } 356 }
(...skipping 26 matching lines...) Expand all
377 } 383 }
378 384
379 void ExternalInstallError::OnFetchComplete() { 385 void ExternalInstallError::OnFetchComplete() {
380 // Create a new ExtensionInstallPrompt. We pass in NULL for the UI 386 // Create a new ExtensionInstallPrompt. We pass in NULL for the UI
381 // components because we display at a later point, and don't want 387 // components because we display at a later point, and don't want
382 // to pass ones which may be invalidated. 388 // to pass ones which may be invalidated.
383 install_ui_.reset( 389 install_ui_.reset(
384 new ExtensionInstallPrompt(Profile::FromBrowserContext(browser_context_), 390 new ExtensionInstallPrompt(Profile::FromBrowserContext(browser_context_),
385 NULL)); // NULL native window. 391 NULL)); // NULL native window.
386 392
387 install_ui_->ShowDialog(this, GetExtension(), 393 install_ui_->ShowDialog(base::Bind(&ExternalInstallError::OnInstallPromptDone,
394 weak_factory_.GetWeakPtr()),
395 GetExtension(),
388 nullptr, // Force a fetch of the icon. 396 nullptr, // Force a fetch of the icon.
389 std::move(prompt_), 397 std::move(prompt_),
390 base::Bind(&ExternalInstallError::OnDialogReady, 398 base::Bind(&ExternalInstallError::OnDialogReady,
391 weak_factory_.GetWeakPtr())); 399 weak_factory_.GetWeakPtr()));
392 } 400 }
393 401
394 void ExternalInstallError::OnDialogReady( 402 void ExternalInstallError::OnDialogReady(
395 ExtensionInstallPromptShowParams* show_params, 403 ExtensionInstallPromptShowParams* show_params,
396 ExtensionInstallPrompt::Delegate* prompt_delegate, 404 const ExtensionInstallPrompt::DoneCallback& callback,
397 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt) { 405 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt) {
398 DCHECK_EQ(this, prompt_delegate);
399 prompt_ = std::move(prompt); 406 prompt_ = std::move(prompt);
400 407
401 if (alert_type_ == BUBBLE_ALERT) { 408 if (alert_type_ == BUBBLE_ALERT) {
402 global_error_.reset(new ExternalInstallBubbleAlert(this, prompt_.get())); 409 global_error_.reset(new ExternalInstallBubbleAlert(this, prompt_.get()));
403 error_service_->AddGlobalError(global_error_.get()); 410 error_service_->AddGlobalError(global_error_.get());
404 411
405 Browser* browser = 412 Browser* browser =
406 chrome::FindTabbedBrowser(Profile::FromBrowserContext(browser_context_), 413 chrome::FindTabbedBrowser(Profile::FromBrowserContext(browser_context_),
407 true, 414 true,
408 chrome::GetActiveDesktop()); 415 chrome::GetActiveDesktop());
409 if (browser) 416 if (browser)
410 global_error_->ShowBubbleView(browser); 417 global_error_->ShowBubbleView(browser);
411 } else { 418 } else {
412 DCHECK(alert_type_ == MENU_ALERT); 419 DCHECK(alert_type_ == MENU_ALERT);
413 global_error_.reset(new ExternalInstallMenuAlert(this)); 420 global_error_.reset(new ExternalInstallMenuAlert(this));
414 error_service_->AddGlobalError(global_error_.get()); 421 error_service_->AddGlobalError(global_error_.get());
415 } 422 }
416 } 423 }
417 424
418 } // namespace extensions 425 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698