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

Side by Side Diff: chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm

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 (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 #import "chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller. h" 5 #import "chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller. h"
6 6
7 #include <utility>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h"
8 #include "base/logging.h" 11 #include "base/logging.h"
9 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
10 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
11 #include "chrome/browser/extensions/api/experience_sampling_private/experience_s ampling.h" 14 #include "chrome/browser/extensions/api/experience_sampling_private/experience_s ampling.h"
12 #include "chrome/browser/extensions/extension_install_prompt_show_params.h" 15 #include "chrome/browser/extensions/extension_install_prompt_show_params.h"
13 #include "chrome/browser/ui/browser.h" 16 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/browser_finder.h" 17 #include "chrome/browser/ui/browser_finder.h"
15 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sh eet.h" 18 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sh eet.h"
16 #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_w indow.h" 19 #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_w indow.h"
17 #import "chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h"
18 #import "chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller.h " 20 #import "chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller.h "
19 #include "chrome/browser/ui/tabs/tab_strip_model.h" 21 #include "chrome/browser/ui/tabs/tab_strip_model.h"
20 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
21 23
22 using extensions::ExperienceSamplingEvent; 24 using extensions::ExperienceSamplingEvent;
23 25
24 namespace { 26 namespace {
25 27
26 void ShowExtensionInstallDialogImpl( 28 void ShowExtensionInstallDialogImpl(
27 ExtensionInstallPromptShowParams* show_params, 29 ExtensionInstallPromptShowParams* show_params,
28 ExtensionInstallPrompt::Delegate* delegate, 30 const ExtensionInstallPrompt::DoneCallback& done_callback,
29 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt) { 31 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt) {
30 // These objects will delete themselves when the dialog closes. 32 // These objects will delete themselves when the dialog closes.
31 if (!show_params->GetParentWebContents()) { 33 if (!show_params->GetParentWebContents()) {
32 new WindowedInstallDialogController(show_params, delegate, prompt.Pass()); 34 new WindowedInstallDialogController(show_params, done_callback,
35 std::move(prompt));
33 return; 36 return;
34 } 37 }
35 38
36 new ExtensionInstallDialogController(show_params, delegate, prompt.Pass()); 39 new ExtensionInstallDialogController(show_params, done_callback,
40 std::move(prompt));
37 } 41 }
38 42
39 } // namespace 43 } // namespace
40 44
41 ExtensionInstallDialogController::ExtensionInstallDialogController( 45 ExtensionInstallDialogController::ExtensionInstallDialogController(
42 ExtensionInstallPromptShowParams* show_params, 46 ExtensionInstallPromptShowParams* show_params,
43 ExtensionInstallPrompt::Delegate* delegate, 47 const ExtensionInstallPrompt::DoneCallback& done_callback,
44 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt) 48 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt)
45 : delegate_(delegate) { 49 : done_callback_(done_callback) {
46 ExtensionInstallPrompt::PromptType promptType = prompt->type(); 50 ExtensionInstallPrompt::PromptType promptType = prompt->type();
47 view_controller_.reset([[ExtensionInstallViewController alloc] 51 view_controller_.reset([[ExtensionInstallViewController alloc]
48 initWithProfile:show_params->profile() 52 initWithProfile:show_params->profile()
49 navigator:show_params->GetParentWebContents() 53 navigator:show_params->GetParentWebContents()
50 delegate:this 54 delegate:this
51 prompt:prompt.Pass()]); 55 prompt:std::move(prompt)]);
52 56
53 base::scoped_nsobject<NSWindow> window([[ConstrainedWindowCustomWindow alloc] 57 base::scoped_nsobject<NSWindow> window([[ConstrainedWindowCustomWindow alloc]
54 initWithContentRect:[[view_controller_ view] bounds]]); 58 initWithContentRect:[[view_controller_ view] bounds]]);
55 [[window contentView] addSubview:[view_controller_ view]]; 59 [[window contentView] addSubview:[view_controller_ view]];
56 60
57 base::scoped_nsobject<CustomConstrainedWindowSheet> sheet( 61 base::scoped_nsobject<CustomConstrainedWindowSheet> sheet(
58 [[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window]); 62 [[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window]);
59 constrained_window_.reset(new ConstrainedWindowMac( 63 constrained_window_.reset(new ConstrainedWindowMac(
60 this, show_params->GetParentWebContents(), sheet)); 64 this, show_params->GetParentWebContents(), sheet));
61 65
62 std::string event_name = ExperienceSamplingEvent::kExtensionInstallDialog; 66 std::string event_name = ExperienceSamplingEvent::kExtensionInstallDialog;
63 event_name.append( 67 event_name.append(
64 ExtensionInstallPrompt::PromptTypeToString(promptType)); 68 ExtensionInstallPrompt::PromptTypeToString(promptType));
65 sampling_event_ = ExperienceSamplingEvent::Create(event_name); 69 sampling_event_ = ExperienceSamplingEvent::Create(event_name);
66 } 70 }
67 71
68 ExtensionInstallDialogController::~ExtensionInstallDialogController() { 72 ExtensionInstallDialogController::~ExtensionInstallDialogController() {
69 } 73 }
70 74
71 void ExtensionInstallDialogController::InstallUIProceed() { 75 void ExtensionInstallDialogController::OnOkButtonClicked() {
72 if (sampling_event_.get()) 76 OnPromptButtonClicked(ExtensionInstallPrompt::Result::ACCEPTED,
73 sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kProceed); 77 ExperienceSamplingEvent::kProceed);
74 delegate_->InstallUIProceed();
75 delegate_ = NULL;
76 constrained_window_->CloseWebContentsModalDialog();
77 } 78 }
78 79
79 void ExtensionInstallDialogController::InstallUIAbort(bool user_initiated) { 80 void ExtensionInstallDialogController::OnCancelButtonClicked() {
80 if (sampling_event_.get()) 81 OnPromptButtonClicked(ExtensionInstallPrompt::Result::USER_CANCELED,
81 sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kDeny); 82 ExperienceSamplingEvent::kDeny);
82 delegate_->InstallUIAbort(user_initiated); 83 }
83 delegate_ = NULL; 84
84 constrained_window_->CloseWebContentsModalDialog(); 85 void ExtensionInstallDialogController::OnStoreLinkClicked() {
86 OnPromptButtonClicked(ExtensionInstallPrompt::Result::USER_CANCELED,
87 ExperienceSamplingEvent::kDeny);
85 } 88 }
86 89
87 void ExtensionInstallDialogController::OnConstrainedWindowClosed( 90 void ExtensionInstallDialogController::OnConstrainedWindowClosed(
88 ConstrainedWindowMac* window) { 91 ConstrainedWindowMac* window) {
89 if (delegate_) 92 if (!done_callback_.is_null()) {
90 delegate_->InstallUIAbort(false); 93 base::ResetAndReturn(&done_callback_).Run(
94 ExtensionInstallPrompt::Result::ABORTED);
95 }
91 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); 96 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
92 } 97 }
93 98
99 void ExtensionInstallDialogController::OnPromptButtonClicked(
100 ExtensionInstallPrompt::Result result,
101 const char* decision_event) {
102 if (sampling_event_.get())
103 sampling_event_->CreateUserDecisionEvent(decision_event);
104 base::ResetAndReturn(&done_callback_).Run(result);
105 constrained_window_->CloseWebContentsModalDialog();
106 }
107
94 // static 108 // static
95 ExtensionInstallPrompt::ShowDialogCallback 109 ExtensionInstallPrompt::ShowDialogCallback
96 ExtensionInstallPrompt::GetDefaultShowDialogCallback() { 110 ExtensionInstallPrompt::GetDefaultShowDialogCallback() {
97 return base::Bind(&ShowExtensionInstallDialogImpl); 111 return base::Bind(&ShowExtensionInstallDialogImpl);
98 } 112 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698