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

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

Powered by Google App Engine
This is Rietveld 408576698