Index: chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc |
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc |
index 9cb4e9147e6d7bdbd28fac664e10577b729a6348..90824b90247cdc66f6ff757a6f9385459c91a05f 100644 |
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc |
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc |
@@ -69,35 +69,43 @@ class MockExtensionInstallPrompt : public ExtensionInstallPrompt { |
ExtensionInstallPrompt::Prompt* prompt_; |
}; |
-class ScrollbarTest : public ExtensionBrowserTest { |
+class ExtensionInstallDialogViewTestBase : public ExtensionBrowserTest { |
protected: |
- ScrollbarTest(); |
- virtual ~ScrollbarTest() {} |
+ explicit ExtensionInstallDialogViewTestBase( |
+ ExtensionInstallPrompt::PromptType prompt_type); |
+ virtual ~ExtensionInstallDialogViewTestBase() {} |
virtual void SetUpOnMainThread() OVERRIDE; |
+ ExtensionInstallPrompt::Prompt* prompt() { return prompt_.get(); } |
+ content::WebContents* web_contents() { return web_contents_; } |
+ MockExtensionInstallPromptDelegate* delegate() { return &delegate_; } |
+ |
void SetPromptPermissions(std::vector<base::string16> permissions); |
void SetPromptDetails(std::vector<base::string16> details); |
void SetPromptRetainedFiles(std::vector<base::FilePath> files); |
- bool IsScrollbarVisible(); |
- |
private: |
const extensions::Extension* extension_; |
MockExtensionInstallPrompt* install_prompt_; |
scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_; |
content::WebContents* web_contents_; |
+ MockExtensionInstallPromptDelegate delegate_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewTestBase); |
}; |
-ScrollbarTest::ScrollbarTest() : |
- extension_(NULL), |
- install_prompt_(NULL), |
- prompt_(new ExtensionInstallPrompt::Prompt( |
- ExtensionInstallPrompt::PERMISSIONS_PROMPT)), |
- web_contents_(NULL) {} |
+ExtensionInstallDialogViewTestBase::ExtensionInstallDialogViewTestBase( |
+ ExtensionInstallPrompt::PromptType prompt_type) |
+ : extension_(NULL), |
+ install_prompt_(NULL), |
+ prompt_(new ExtensionInstallPrompt::Prompt(prompt_type)), |
+ web_contents_(NULL) { |
+} |
-void ScrollbarTest::SetUpOnMainThread() { |
+void ExtensionInstallDialogViewTestBase::SetUpOnMainThread() { |
ExtensionBrowserTest::SetUpOnMainThread(); |
+ |
extension_ = ExtensionBrowserTest::LoadExtension(test_data_dir_.AppendASCII( |
"install_prompt/permissions_scrollbar_regression")); |
@@ -118,26 +126,41 @@ void ScrollbarTest::SetUpOnMainThread() { |
this->SetPromptRetainedFiles(std::vector<base::FilePath>()); |
} |
-void ScrollbarTest::SetPromptPermissions( |
+void ExtensionInstallDialogViewTestBase::SetPromptPermissions( |
std::vector<base::string16> permissions) { |
prompt_->SetPermissions(permissions); |
} |
-void ScrollbarTest::SetPromptDetails( |
+void ExtensionInstallDialogViewTestBase::SetPromptDetails( |
std::vector<base::string16> details) { |
prompt_->SetPermissionsDetails(details); |
} |
-void ScrollbarTest::SetPromptRetainedFiles( |
+void ExtensionInstallDialogViewTestBase::SetPromptRetainedFiles( |
std::vector<base::FilePath> files) { |
prompt_->set_retained_files(files); |
} |
+class ScrollbarTest : public ExtensionInstallDialogViewTestBase { |
+ protected: |
+ ScrollbarTest(); |
+ virtual ~ScrollbarTest() {} |
+ |
+ bool IsScrollbarVisible(); |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ScrollbarTest); |
+}; |
+ |
+ScrollbarTest::ScrollbarTest() |
+ : ExtensionInstallDialogViewTestBase( |
+ ExtensionInstallPrompt::PERMISSIONS_PROMPT) { |
+} |
+ |
bool ScrollbarTest::IsScrollbarVisible() { |
- ExtensionInstallPrompt::ShowParams show_params(web_contents_); |
- MockExtensionInstallPromptDelegate delegate; |
- ExtensionInstallDialogView* dialog = |
- new ExtensionInstallDialogView(show_params.navigator, &delegate, prompt_); |
+ ExtensionInstallPrompt::ShowParams show_params(web_contents()); |
+ ExtensionInstallDialogView* dialog = new ExtensionInstallDialogView( |
+ show_params.navigator, delegate(), prompt()); |
// Create the modal view around the install dialog view. |
views::Widget* modal = |
@@ -178,3 +201,61 @@ IN_PROC_BROWSER_TEST_F(ScrollbarTest, ScrollbarRegression) { |
this->SetPromptDetails(details); |
ASSERT_FALSE(IsScrollbarVisible()) << "Scrollbar is visible"; |
} |
+ |
+class ExtensionInstallDialogViewTest |
+ : public ExtensionInstallDialogViewTestBase { |
+ protected: |
+ ExtensionInstallDialogViewTest() |
+ : ExtensionInstallDialogViewTestBase( |
+ ExtensionInstallPrompt::INSTALL_PROMPT) {} |
+ virtual ~ExtensionInstallDialogViewTest() {} |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewTest); |
+}; |
+ |
+// Verifies that the delegate is notified when the user selects to accept or |
+// cancel the install. |
+IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewTest, NotifyDelegate) { |
+ { |
+ // The user confirms the install. |
+ MockExtensionInstallPromptDelegate delegate; |
+ scoped_ptr<ExtensionInstallDialogView> dialog( |
+ new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); |
+ views::DialogDelegateView* delegate_view = dialog.get(); |
+ |
+ delegate_view->Accept(); |
+ delegate_view->OnClosed(); |
+ dialog.reset(); |
+ |
+ EXPECT_EQ(0, delegate.abort_count()); |
+ EXPECT_EQ(1, delegate.proceed_count()); |
+ } |
+ |
+ { |
+ // The user cancels the install. |
+ MockExtensionInstallPromptDelegate delegate; |
+ scoped_ptr<ExtensionInstallDialogView> dialog( |
+ new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); |
+ views::DialogDelegateView* delegate_view = dialog.get(); |
+ |
+ delegate_view->Cancel(); |
+ delegate_view->OnClosed(); |
+ dialog.reset(); |
+ |
+ EXPECT_EQ(1, delegate.abort_count()); |
+ EXPECT_EQ(0, delegate.proceed_count()); |
+ } |
+ |
+ { |
+ // Corner case: Dialog is closed without the user explicitly choosing to |
+ // proceed or cancel. |
+ MockExtensionInstallPromptDelegate delegate; |
+ scoped_ptr<ExtensionInstallDialogView> dialog( |
+ new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); |
+ dialog.reset(); |
+ |
+ EXPECT_EQ(1, delegate.abort_count()); |
+ EXPECT_EQ(0, delegate.proceed_count()); |
+ } |
+} |