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

Side by Side Diff: chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc

Issue 547253002: Ensure app install is aborted when the install dialog is closed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Lower risk fix Created 6 years, 3 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
« no previous file with comments | « chrome/browser/ui/views/extensions/extension_install_dialog_view.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/run_loop.h" 5 #include "base/run_loop.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/browser/extensions/extension_browsertest.h" 7 #include "chrome/browser/extensions/extension_browsertest.h"
8 #include "chrome/browser/extensions/extension_icon_manager.h" 8 #include "chrome/browser/extensions/extension_icon_manager.h"
9 #include "chrome/browser/extensions/extension_install_prompt.h" 9 #include "chrome/browser/extensions/extension_install_prompt.h"
10 #include "chrome/browser/extensions/extension_install_prompt_experiment.h" 10 #include "chrome/browser/extensions/extension_install_prompt_experiment.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 prompt_ = prompt; 62 prompt_ = prompt;
63 } 63 }
64 ExtensionInstallPrompt::Prompt* get_prompt() { 64 ExtensionInstallPrompt::Prompt* get_prompt() {
65 return prompt_; 65 return prompt_;
66 } 66 }
67 67
68 private: 68 private:
69 ExtensionInstallPrompt::Prompt* prompt_; 69 ExtensionInstallPrompt::Prompt* prompt_;
70 }; 70 };
71 71
72 class ScrollbarTest : public ExtensionBrowserTest { 72 class ExtensionInstallDialogViewTestBase : public ExtensionBrowserTest {
73 protected: 73 protected:
74 ScrollbarTest(); 74 explicit ExtensionInstallDialogViewTestBase(
75 virtual ~ScrollbarTest() {} 75 ExtensionInstallPrompt::PromptType prompt_type);
76 virtual ~ExtensionInstallDialogViewTestBase() {}
76 77
77 virtual void SetUpOnMainThread() OVERRIDE; 78 virtual void SetUpOnMainThread() OVERRIDE;
78 79
80 ExtensionInstallPrompt::Prompt* prompt() { return prompt_.get(); }
81 content::WebContents* web_contents() { return web_contents_; }
82 MockExtensionInstallPromptDelegate* delegate() { return &delegate_; }
83
79 void SetPromptPermissions(std::vector<base::string16> permissions); 84 void SetPromptPermissions(std::vector<base::string16> permissions);
80 void SetPromptDetails(std::vector<base::string16> details); 85 void SetPromptDetails(std::vector<base::string16> details);
81 void SetPromptRetainedFiles(std::vector<base::FilePath> files); 86 void SetPromptRetainedFiles(std::vector<base::FilePath> files);
82 87
83 bool IsScrollbarVisible();
84
85 private: 88 private:
86 const extensions::Extension* extension_; 89 const extensions::Extension* extension_;
87 MockExtensionInstallPrompt* install_prompt_; 90 MockExtensionInstallPrompt* install_prompt_;
88 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_; 91 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_;
89 content::WebContents* web_contents_; 92 content::WebContents* web_contents_;
93 MockExtensionInstallPromptDelegate delegate_;
94
95 DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewTestBase);
90 }; 96 };
91 97
92 ScrollbarTest::ScrollbarTest() : 98 ExtensionInstallDialogViewTestBase::ExtensionInstallDialogViewTestBase(
93 extension_(NULL), 99 ExtensionInstallPrompt::PromptType prompt_type)
94 install_prompt_(NULL), 100 : extension_(NULL),
95 prompt_(new ExtensionInstallPrompt::Prompt( 101 install_prompt_(NULL),
96 ExtensionInstallPrompt::PERMISSIONS_PROMPT)), 102 prompt_(new ExtensionInstallPrompt::Prompt(prompt_type)),
97 web_contents_(NULL) {} 103 web_contents_(NULL) {
104 }
98 105
99 void ScrollbarTest::SetUpOnMainThread() { 106 void ExtensionInstallDialogViewTestBase::SetUpOnMainThread() {
100 ExtensionBrowserTest::SetUpOnMainThread(); 107 ExtensionBrowserTest::SetUpOnMainThread();
108
101 extension_ = ExtensionBrowserTest::LoadExtension(test_data_dir_.AppendASCII( 109 extension_ = ExtensionBrowserTest::LoadExtension(test_data_dir_.AppendASCII(
102 "install_prompt/permissions_scrollbar_regression")); 110 "install_prompt/permissions_scrollbar_regression"));
103 111
104 web_contents_ = browser()->tab_strip_model()->GetWebContentsAt(0); 112 web_contents_ = browser()->tab_strip_model()->GetWebContentsAt(0);
105 113
106 install_prompt_ = new MockExtensionInstallPrompt(web_contents_); 114 install_prompt_ = new MockExtensionInstallPrompt(web_contents_);
107 install_prompt_->set_prompt(prompt_.get()); 115 install_prompt_->set_prompt(prompt_.get());
108 prompt_->set_experiment(ExtensionInstallPromptExperiment::ControlGroup()); 116 prompt_->set_experiment(ExtensionInstallPromptExperiment::ControlGroup());
109 prompt_->set_extension(extension_); 117 prompt_->set_extension(extension_);
110 118
111 scoped_ptr<ExtensionIconManager> icon_manager(new ExtensionIconManager()); 119 scoped_ptr<ExtensionIconManager> icon_manager(new ExtensionIconManager());
112 const SkBitmap icon_bitmap = icon_manager->GetIcon(extension_->id()); 120 const SkBitmap icon_bitmap = icon_manager->GetIcon(extension_->id());
113 gfx::Image icon = gfx::Image::CreateFrom1xBitmap(icon_bitmap); 121 gfx::Image icon = gfx::Image::CreateFrom1xBitmap(icon_bitmap);
114 prompt_->set_icon(icon); 122 prompt_->set_icon(icon);
115 123
116 this->SetPromptPermissions(std::vector<base::string16>()); 124 this->SetPromptPermissions(std::vector<base::string16>());
117 this->SetPromptDetails(std::vector<base::string16>()); 125 this->SetPromptDetails(std::vector<base::string16>());
118 this->SetPromptRetainedFiles(std::vector<base::FilePath>()); 126 this->SetPromptRetainedFiles(std::vector<base::FilePath>());
119 } 127 }
120 128
121 void ScrollbarTest::SetPromptPermissions( 129 void ExtensionInstallDialogViewTestBase::SetPromptPermissions(
122 std::vector<base::string16> permissions) { 130 std::vector<base::string16> permissions) {
123 prompt_->SetPermissions(permissions); 131 prompt_->SetPermissions(permissions);
124 } 132 }
125 133
126 void ScrollbarTest::SetPromptDetails( 134 void ExtensionInstallDialogViewTestBase::SetPromptDetails(
127 std::vector<base::string16> details) { 135 std::vector<base::string16> details) {
128 prompt_->SetPermissionsDetails(details); 136 prompt_->SetPermissionsDetails(details);
129 } 137 }
130 138
131 void ScrollbarTest::SetPromptRetainedFiles( 139 void ExtensionInstallDialogViewTestBase::SetPromptRetainedFiles(
132 std::vector<base::FilePath> files) { 140 std::vector<base::FilePath> files) {
133 prompt_->set_retained_files(files); 141 prompt_->set_retained_files(files);
134 } 142 }
135 143
144 class ScrollbarTest : public ExtensionInstallDialogViewTestBase {
145 protected:
146 ScrollbarTest();
147 virtual ~ScrollbarTest() {}
148
149 bool IsScrollbarVisible();
150
151 private:
152 DISALLOW_COPY_AND_ASSIGN(ScrollbarTest);
153 };
154
155 ScrollbarTest::ScrollbarTest()
156 : ExtensionInstallDialogViewTestBase(
157 ExtensionInstallPrompt::PERMISSIONS_PROMPT) {
158 }
159
136 bool ScrollbarTest::IsScrollbarVisible() { 160 bool ScrollbarTest::IsScrollbarVisible() {
137 ExtensionInstallPrompt::ShowParams show_params(web_contents_); 161 ExtensionInstallPrompt::ShowParams show_params(web_contents());
138 MockExtensionInstallPromptDelegate delegate; 162 ExtensionInstallDialogView* dialog = new ExtensionInstallDialogView(
139 ExtensionInstallDialogView* dialog = 163 show_params.navigator, delegate(), prompt());
140 new ExtensionInstallDialogView(show_params.navigator, &delegate, prompt_);
141 164
142 // Create the modal view around the install dialog view. 165 // Create the modal view around the install dialog view.
143 views::Widget* modal = 166 views::Widget* modal =
144 CreateBrowserModalDialogViews(dialog, show_params.parent_window); 167 CreateBrowserModalDialogViews(dialog, show_params.parent_window);
145 modal->Show(); 168 modal->Show();
146 content::BrowserThread::GetBlockingPool()->FlushForTesting(); 169 content::BrowserThread::GetBlockingPool()->FlushForTesting();
147 base::RunLoop().RunUntilIdle(); 170 base::RunLoop().RunUntilIdle();
148 171
149 // Check if the vertical scrollbar is visible. 172 // Check if the vertical scrollbar is visible.
150 return dialog->scroll_view()->vertical_scroll_bar()->visible(); 173 return dialog->scroll_view()->vertical_scroll_bar()->visible();
(...skipping 20 matching lines...) Expand all
171 base::string16 permission_string(base::ASCIIToUTF16( 194 base::string16 permission_string(base::ASCIIToUTF16(
172 "Read and modify your data on *.facebook.com")); 195 "Read and modify your data on *.facebook.com"));
173 std::vector<base::string16> permissions; 196 std::vector<base::string16> permissions;
174 permissions.push_back(permission_string); 197 permissions.push_back(permission_string);
175 this->SetPromptPermissions(permissions); 198 this->SetPromptPermissions(permissions);
176 std::vector<base::string16> details; 199 std::vector<base::string16> details;
177 details.push_back(base::string16()); 200 details.push_back(base::string16());
178 this->SetPromptDetails(details); 201 this->SetPromptDetails(details);
179 ASSERT_FALSE(IsScrollbarVisible()) << "Scrollbar is visible"; 202 ASSERT_FALSE(IsScrollbarVisible()) << "Scrollbar is visible";
180 } 203 }
204
205 class ExtensionInstallDialogViewTest
206 : public ExtensionInstallDialogViewTestBase {
207 protected:
208 ExtensionInstallDialogViewTest()
209 : ExtensionInstallDialogViewTestBase(
210 ExtensionInstallPrompt::INSTALL_PROMPT) {}
211 virtual ~ExtensionInstallDialogViewTest() {}
212
213 private:
214 DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewTest);
215 };
216
217 // Verifies that the delegate is notified when the user selects to accept or
218 // cancel the install.
219 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewTest, NotifyDelegate) {
220 {
221 // The user confirms the install.
222 MockExtensionInstallPromptDelegate delegate;
223 scoped_ptr<ExtensionInstallDialogView> dialog(
224 new ExtensionInstallDialogView(web_contents(), &delegate, prompt()));
225 views::DialogDelegateView* delegate_view = dialog.get();
226
227 delegate_view->Accept();
228 delegate_view->OnClosed();
229 dialog.reset();
230
231 EXPECT_EQ(0, delegate.abort_count());
232 EXPECT_EQ(1, delegate.proceed_count());
233 }
234
235 {
236 // The user cancels the install.
237 MockExtensionInstallPromptDelegate delegate;
238 scoped_ptr<ExtensionInstallDialogView> dialog(
239 new ExtensionInstallDialogView(web_contents(), &delegate, prompt()));
240 views::DialogDelegateView* delegate_view = dialog.get();
241
242 delegate_view->Cancel();
243 delegate_view->OnClosed();
244 dialog.reset();
245
246 EXPECT_EQ(1, delegate.abort_count());
247 EXPECT_EQ(0, delegate.proceed_count());
248 }
249
250 {
251 // Corner case: Dialog is closed without the user explicitly choosing to
252 // proceed or cancel.
253 MockExtensionInstallPromptDelegate delegate;
254 scoped_ptr<ExtensionInstallDialogView> dialog(
255 new ExtensionInstallDialogView(web_contents(), &delegate, prompt()));
256 dialog.reset();
257
258 EXPECT_EQ(1, delegate.abort_count());
259 EXPECT_EQ(0, delegate.proceed_count());
260 }
261 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/extensions/extension_install_dialog_view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698