| OLD | NEW |
| 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/ui/views/extensions/extension_install_dialog_view.h" | 5 #include "chrome/browser/ui/views/extensions/extension_install_dialog_view.h" |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/extensions/extension_browsertest.h" | 8 #include "chrome/browser/extensions/extension_browsertest.h" |
| 9 #include "chrome/browser/extensions/extension_icon_manager.h" | 9 #include "chrome/browser/extensions/extension_icon_manager.h" |
| 10 #include "chrome/browser/extensions/extension_install_prompt.h" | 10 #include "chrome/browser/extensions/extension_install_prompt.h" |
| 11 #include "chrome/browser/ui/browser.h" | 11 #include "chrome/browser/ui/browser.h" |
| 12 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 12 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 13 #include "chrome/browser/ui/webui/extensions/extension_settings_handler.h" | 13 #include "chrome/browser/ui/webui/extensions/extension_settings_handler.h" |
| 14 #include "chrome/common/extensions/extension_test_util.h" | 14 #include "chrome/common/extensions/extension_test_util.h" |
| 15 #include "components/constrained_window/constrained_window_views.h" | 15 #include "components/constrained_window/constrained_window_views.h" |
| 16 #include "content/public/browser/browser_thread.h" | 16 #include "content/public/browser/browser_thread.h" |
| 17 #include "content/public/test/test_utils.h" | 17 #include "content/public/test/test_utils.h" |
| 18 #include "extensions/common/extension.h" | 18 #include "extensions/common/extension.h" |
| 19 #include "extensions/common/permissions/permission_message_provider.h" |
| 19 #include "extensions/common/permissions/permissions_data.h" | 20 #include "extensions/common/permissions/permissions_data.h" |
| 20 #include "extensions/common/test_util.h" | 21 #include "extensions/common/test_util.h" |
| 21 #include "ui/views/controls/scroll_view.h" | 22 #include "ui/views/controls/scroll_view.h" |
| 22 #include "ui/views/view.h" | 23 #include "ui/views/view.h" |
| 23 #include "ui/views/widget/widget.h" | 24 #include "ui/views/widget/widget.h" |
| 24 | 25 |
| 26 using extensions::PermissionMessageString; |
| 27 using extensions::PermissionMessageStrings; |
| 28 |
| 25 // A simple delegate implementation that counts the number of times | 29 // A simple delegate implementation that counts the number of times |
| 26 // |InstallUIProceed| and |InstallUIAbort| are called. | 30 // |InstallUIProceed| and |InstallUIAbort| are called. |
| 27 class MockExtensionInstallPromptDelegate | 31 class MockExtensionInstallPromptDelegate |
| 28 : public ExtensionInstallPrompt::Delegate { | 32 : public ExtensionInstallPrompt::Delegate { |
| 29 public: | 33 public: |
| 30 MockExtensionInstallPromptDelegate() | 34 MockExtensionInstallPromptDelegate() |
| 31 : proceed_count_(0), | 35 : proceed_count_(0), |
| 32 abort_count_(0) {} | 36 abort_count_(0) {} |
| 33 | 37 |
| 34 // ExtensionInstallPrompt::Delegate overrides. | 38 // ExtensionInstallPrompt::Delegate overrides. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 explicit ExtensionInstallDialogViewTestBase( | 78 explicit ExtensionInstallDialogViewTestBase( |
| 75 ExtensionInstallPrompt::PromptType prompt_type); | 79 ExtensionInstallPrompt::PromptType prompt_type); |
| 76 ~ExtensionInstallDialogViewTestBase() override {} | 80 ~ExtensionInstallDialogViewTestBase() override {} |
| 77 | 81 |
| 78 void SetUpOnMainThread() override; | 82 void SetUpOnMainThread() override; |
| 79 | 83 |
| 80 ExtensionInstallPrompt::Prompt* prompt() { return prompt_.get(); } | 84 ExtensionInstallPrompt::Prompt* prompt() { return prompt_.get(); } |
| 81 content::WebContents* web_contents() { return web_contents_; } | 85 content::WebContents* web_contents() { return web_contents_; } |
| 82 MockExtensionInstallPromptDelegate* delegate() { return &delegate_; } | 86 MockExtensionInstallPromptDelegate* delegate() { return &delegate_; } |
| 83 | 87 |
| 84 void SetPromptPermissions(std::vector<base::string16> permissions); | 88 void SetPromptPermissions(const PermissionMessageStrings& permissions); |
| 85 void SetPromptDetails(std::vector<base::string16> details); | |
| 86 void SetPromptRetainedFiles(std::vector<base::FilePath> files); | 89 void SetPromptRetainedFiles(std::vector<base::FilePath> files); |
| 87 | 90 |
| 88 private: | 91 private: |
| 89 const extensions::Extension* extension_; | 92 const extensions::Extension* extension_; |
| 90 MockExtensionInstallPrompt* install_prompt_; | 93 MockExtensionInstallPrompt* install_prompt_; |
| 91 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_; | 94 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_; |
| 92 content::WebContents* web_contents_; | 95 content::WebContents* web_contents_; |
| 93 MockExtensionInstallPromptDelegate delegate_; | 96 MockExtensionInstallPromptDelegate delegate_; |
| 94 | 97 |
| 95 DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewTestBase); | 98 DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewTestBase); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 113 | 116 |
| 114 install_prompt_ = new MockExtensionInstallPrompt(web_contents_); | 117 install_prompt_ = new MockExtensionInstallPrompt(web_contents_); |
| 115 install_prompt_->set_prompt(prompt_.get()); | 118 install_prompt_->set_prompt(prompt_.get()); |
| 116 prompt_->set_extension(extension_); | 119 prompt_->set_extension(extension_); |
| 117 | 120 |
| 118 scoped_ptr<ExtensionIconManager> icon_manager(new ExtensionIconManager()); | 121 scoped_ptr<ExtensionIconManager> icon_manager(new ExtensionIconManager()); |
| 119 const SkBitmap icon_bitmap = icon_manager->GetIcon(extension_->id()); | 122 const SkBitmap icon_bitmap = icon_manager->GetIcon(extension_->id()); |
| 120 gfx::Image icon = gfx::Image::CreateFrom1xBitmap(icon_bitmap); | 123 gfx::Image icon = gfx::Image::CreateFrom1xBitmap(icon_bitmap); |
| 121 prompt_->set_icon(icon); | 124 prompt_->set_icon(icon); |
| 122 | 125 |
| 123 this->SetPromptPermissions(std::vector<base::string16>()); | 126 this->SetPromptPermissions(PermissionMessageStrings()); |
| 124 this->SetPromptDetails(std::vector<base::string16>()); | |
| 125 this->SetPromptRetainedFiles(std::vector<base::FilePath>()); | 127 this->SetPromptRetainedFiles(std::vector<base::FilePath>()); |
| 126 } | 128 } |
| 127 | 129 |
| 128 void ExtensionInstallDialogViewTestBase::SetPromptPermissions( | 130 void ExtensionInstallDialogViewTestBase::SetPromptPermissions( |
| 129 std::vector<base::string16> permissions) { | 131 const PermissionMessageStrings& permissions) { |
| 130 prompt_->SetPermissions(permissions, | 132 prompt_->SetPermissions(permissions, |
| 131 ExtensionInstallPrompt::REGULAR_PERMISSIONS); | 133 ExtensionInstallPrompt::REGULAR_PERMISSIONS); |
| 132 } | 134 } |
| 133 | 135 |
| 134 void ExtensionInstallDialogViewTestBase::SetPromptDetails( | |
| 135 std::vector<base::string16> details) { | |
| 136 prompt_->SetPermissionsDetails(details, | |
| 137 ExtensionInstallPrompt::REGULAR_PERMISSIONS); | |
| 138 } | |
| 139 | |
| 140 void ExtensionInstallDialogViewTestBase::SetPromptRetainedFiles( | 136 void ExtensionInstallDialogViewTestBase::SetPromptRetainedFiles( |
| 141 std::vector<base::FilePath> files) { | 137 std::vector<base::FilePath> files) { |
| 142 prompt_->set_retained_files(files); | 138 prompt_->set_retained_files(files); |
| 143 } | 139 } |
| 144 | 140 |
| 145 class ScrollbarTest : public ExtensionInstallDialogViewTestBase { | 141 class ScrollbarTest : public ExtensionInstallDialogViewTestBase { |
| 146 protected: | 142 protected: |
| 147 ScrollbarTest(); | 143 ScrollbarTest(); |
| 148 ~ScrollbarTest() override {} | 144 ~ScrollbarTest() override {} |
| 149 | 145 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 172 content::RunAllBlockingPoolTasksUntilIdle(); | 168 content::RunAllBlockingPoolTasksUntilIdle(); |
| 173 | 169 |
| 174 // Check if the vertical scrollbar is visible. | 170 // Check if the vertical scrollbar is visible. |
| 175 return dialog->scroll_view()->vertical_scroll_bar()->visible(); | 171 return dialog->scroll_view()->vertical_scroll_bar()->visible(); |
| 176 } | 172 } |
| 177 | 173 |
| 178 // Tests that a scrollbar _is_ shown for an excessively long extension | 174 // Tests that a scrollbar _is_ shown for an excessively long extension |
| 179 // install prompt. | 175 // install prompt. |
| 180 IN_PROC_BROWSER_TEST_F(ScrollbarTest, LongPromptScrollbar) { | 176 IN_PROC_BROWSER_TEST_F(ScrollbarTest, LongPromptScrollbar) { |
| 181 base::string16 permission_string(base::ASCIIToUTF16("Test")); | 177 base::string16 permission_string(base::ASCIIToUTF16("Test")); |
| 182 std::vector<base::string16> permissions; | 178 PermissionMessageStrings permissions; |
| 183 std::vector<base::string16> details; | 179 for (int i = 0; i < 20; i++) |
| 184 for (int i = 0; i < 20; i++) { | 180 permissions.push_back(PermissionMessageString(permission_string)); |
| 185 permissions.push_back(permission_string); | |
| 186 details.push_back(base::string16()); | |
| 187 } | |
| 188 this->SetPromptPermissions(permissions); | 181 this->SetPromptPermissions(permissions); |
| 189 this->SetPromptDetails(details); | |
| 190 ASSERT_TRUE(IsScrollbarVisible()) << "Scrollbar is not visible"; | 182 ASSERT_TRUE(IsScrollbarVisible()) << "Scrollbar is not visible"; |
| 191 } | 183 } |
| 192 | 184 |
| 193 // Tests that a scrollbar isn't shown for this regression case. | 185 // Tests that a scrollbar isn't shown for this regression case. |
| 194 // See crbug.com/385570 for details. | 186 // See crbug.com/385570 for details. |
| 195 IN_PROC_BROWSER_TEST_F(ScrollbarTest, ScrollbarRegression) { | 187 IN_PROC_BROWSER_TEST_F(ScrollbarTest, ScrollbarRegression) { |
| 196 base::string16 permission_string(base::ASCIIToUTF16( | 188 base::string16 permission_string(base::ASCIIToUTF16( |
| 197 "Read and modify your data on *.facebook.com")); | 189 "Read and modify your data on *.facebook.com")); |
| 198 std::vector<base::string16> permissions; | 190 PermissionMessageStrings permissions; |
| 199 permissions.push_back(permission_string); | 191 permissions.push_back(PermissionMessageString(permission_string)); |
| 200 this->SetPromptPermissions(permissions); | 192 this->SetPromptPermissions(permissions); |
| 201 std::vector<base::string16> details; | |
| 202 details.push_back(base::string16()); | |
| 203 this->SetPromptDetails(details); | |
| 204 ASSERT_FALSE(IsScrollbarVisible()) << "Scrollbar is visible"; | 193 ASSERT_FALSE(IsScrollbarVisible()) << "Scrollbar is visible"; |
| 205 } | 194 } |
| 206 | 195 |
| 207 class ExtensionInstallDialogViewTest | 196 class ExtensionInstallDialogViewTest |
| 208 : public ExtensionInstallDialogViewTestBase { | 197 : public ExtensionInstallDialogViewTestBase { |
| 209 protected: | 198 protected: |
| 210 ExtensionInstallDialogViewTest() | 199 ExtensionInstallDialogViewTest() |
| 211 : ExtensionInstallDialogViewTestBase( | 200 : ExtensionInstallDialogViewTestBase( |
| 212 ExtensionInstallPrompt::INSTALL_PROMPT) {} | 201 ExtensionInstallPrompt::INSTALL_PROMPT) {} |
| 213 ~ExtensionInstallDialogViewTest() override {} | 202 ~ExtensionInstallDialogViewTest() override {} |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 MockExtensionInstallPromptDelegate delegate; | 246 MockExtensionInstallPromptDelegate delegate; |
| 258 scoped_ptr<ExtensionInstallDialogView> dialog( | 247 scoped_ptr<ExtensionInstallDialogView> dialog( |
| 259 new ExtensionInstallDialogView( | 248 new ExtensionInstallDialogView( |
| 260 profile(), web_contents(), &delegate, prompt())); | 249 profile(), web_contents(), &delegate, prompt())); |
| 261 dialog.reset(); | 250 dialog.reset(); |
| 262 | 251 |
| 263 EXPECT_EQ(1, delegate.abort_count()); | 252 EXPECT_EQ(1, delegate.abort_count()); |
| 264 EXPECT_EQ(0, delegate.proceed_count()); | 253 EXPECT_EQ(0, delegate.proceed_count()); |
| 265 } | 254 } |
| 266 } | 255 } |
| OLD | NEW |