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

Side by Side Diff: chrome/browser/extensions/extension_install_prompt_browsertest.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/extension_install_prompt.h" 5 #include "chrome/browser/extensions/extension_install_prompt.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "chrome/browser/extensions/extension_install_prompt_show_params.h" 9 #include "chrome/browser/extensions/extension_install_prompt_show_params.h"
10 #include "chrome/browser/extensions/extension_install_prompt_test_helper.h"
10 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser.h"
11 #include "chrome/browser/ui/browser_window.h" 12 #include "chrome/browser/ui/browser_window.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h" 13 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13 #include "chrome/test/base/in_process_browser_test.h" 14 #include "chrome/test/base/in_process_browser_test.h"
14 #include "content/public/test/test_utils.h" 15 #include "content/public/test/test_utils.h"
16 #include "extensions/browser/extension_dialog_auto_confirm.h"
15 #include "extensions/common/extension.h" 17 #include "extensions/common/extension.h"
16 #include "extensions/common/extension_builder.h" 18 #include "extensions/common/extension_builder.h"
17 #include "extensions/common/value_builder.h" 19 #include "extensions/common/value_builder.h"
18 20
21 using extensions::ScopedTestDialogAutoConfirm;
22
19 namespace { 23 namespace {
20 24
21 scoped_refptr<extensions::Extension> BuildTestExtension() { 25 scoped_refptr<extensions::Extension> BuildTestExtension() {
22 return extensions::ExtensionBuilder() 26 return extensions::ExtensionBuilder()
23 .SetManifest(std::move(extensions::DictionaryBuilder() 27 .SetManifest(std::move(extensions::DictionaryBuilder()
24 .Set("name", "foo") 28 .Set("name", "foo")
25 .Set("version", "1.0"))) 29 .Set("version", "1.0")))
26 .Build(); 30 .Build();
27 } 31 }
28 32
29 // ExtensionInstallPrompt::ShowDialogCallback which proceeds without showing the
30 // prompt.
31 void TestShowDialogCallback(ExtensionInstallPromptShowParams* params,
32 ExtensionInstallPrompt::Delegate* delegate,
33 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt) {
34 delegate->InstallUIProceed();
35 }
36
37 class TestExtensionInstallPromptDelegate
38 : public ExtensionInstallPrompt::Delegate {
39 public:
40 explicit TestExtensionInstallPromptDelegate(const base::Closure& quit_closure)
41 : quit_closure_(quit_closure), proceeded_(false), aborted_(false) {}
42
43 ~TestExtensionInstallPromptDelegate() override {
44 }
45
46 bool DidProceed() {
47 return proceeded_;
48 }
49
50 bool DidAbort() {
51 return aborted_;
52 }
53
54 private:
55 void InstallUIProceed() override {
56 proceeded_ = true;
57 quit_closure_.Run();
58 }
59
60 void InstallUIAbort(bool user_initiated) override {
61 aborted_ = true;
62 quit_closure_.Run();
63 }
64
65 base::Closure quit_closure_;
66 bool proceeded_;
67 bool aborted_;
68
69 DISALLOW_COPY_AND_ASSIGN(TestExtensionInstallPromptDelegate);
70 };
71
72 } // namespace 33 } // namespace
73 34
74 typedef InProcessBrowserTest ExtensionInstallPromptBrowserTest; 35 typedef InProcessBrowserTest ExtensionInstallPromptBrowserTest;
75 36
76 // Test that ExtensionInstallPrompt aborts the install if the web contents which 37 // Test that ExtensionInstallPrompt aborts the install if the web contents which
77 // were passed to the ExtensionInstallPrompt constructor get destroyed. 38 // were passed to the ExtensionInstallPrompt constructor get destroyed.
78 // CrxInstaller takes in ExtensionInstallPrompt in the constructor and does a 39 // CrxInstaller takes in ExtensionInstallPrompt in the constructor and does a
79 // bunch of asynchronous processing prior to confirming the install. A user may 40 // bunch of asynchronous processing prior to confirming the install. A user may
80 // close the current tab while this processing is taking place. 41 // close the current tab while this processing is taking place.
81 IN_PROC_BROWSER_TEST_F(ExtensionInstallPromptBrowserTest, 42 IN_PROC_BROWSER_TEST_F(ExtensionInstallPromptBrowserTest,
82 TrackParentWebContentsDestruction) { 43 TrackParentWebContentsDestruction) {
83 AddBlankTabAndShow(browser()); 44 AddBlankTabAndShow(browser());
84 TabStripModel* tab_strip_model = browser()->tab_strip_model(); 45 TabStripModel* tab_strip_model = browser()->tab_strip_model();
85 content::WebContents* web_contents = tab_strip_model->GetActiveWebContents(); 46 content::WebContents* web_contents = tab_strip_model->GetActiveWebContents();
86 int web_contents_index = tab_strip_model->GetIndexOfWebContents(web_contents); 47 int web_contents_index = tab_strip_model->GetIndexOfWebContents(web_contents);
87 scoped_refptr<extensions::Extension> extension(BuildTestExtension()); 48 scoped_refptr<extensions::Extension> extension(BuildTestExtension());
88 49
50 ScopedTestDialogAutoConfirm auto_confirm(ScopedTestDialogAutoConfirm::ACCEPT);
51
89 ExtensionInstallPrompt prompt(web_contents); 52 ExtensionInstallPrompt prompt(web_contents);
90 tab_strip_model->CloseWebContentsAt(web_contents_index, 53 tab_strip_model->CloseWebContentsAt(web_contents_index,
91 TabStripModel::CLOSE_NONE); 54 TabStripModel::CLOSE_NONE);
92 content::RunAllPendingInMessageLoop(); 55 content::RunAllPendingInMessageLoop();
93 56
94 base::RunLoop run_loop; 57 base::RunLoop run_loop;
95 TestExtensionInstallPromptDelegate delegate(run_loop.QuitClosure()); 58 ExtensionInstallPromptTestHelper helper(run_loop.QuitClosure());
96 prompt.ShowDialog(&delegate, extension.get(), nullptr, 59 prompt.ShowDialog(
97 base::Bind(&TestShowDialogCallback)); 60 helper.GetCallback(),
61 extension.get(), nullptr,
62 ExtensionInstallPrompt::GetDefaultShowDialogCallback());
98 run_loop.Run(); 63 run_loop.Run();
99 EXPECT_TRUE(delegate.DidAbort()); 64 EXPECT_EQ(ExtensionInstallPrompt::Result::ABORTED, helper.result());
100 } 65 }
101 66
102 // Test that ExtensionInstallPrompt aborts the install if the gfx::NativeWindow 67 // Test that ExtensionInstallPrompt aborts the install if the gfx::NativeWindow
103 // which is passed to the ExtensionInstallPrompt constructor is destroyed. 68 // which is passed to the ExtensionInstallPrompt constructor is destroyed.
104 IN_PROC_BROWSER_TEST_F(ExtensionInstallPromptBrowserTest, 69 IN_PROC_BROWSER_TEST_F(ExtensionInstallPromptBrowserTest,
105 TrackParentWindowDestruction) { 70 TrackParentWindowDestruction) {
106 // Create a second browser to prevent the app from exiting when the browser is 71 // Create a second browser to prevent the app from exiting when the browser is
107 // closed. 72 // closed.
108 CreateBrowser(browser()->profile()); 73 CreateBrowser(browser()->profile());
109 74
110 scoped_refptr<extensions::Extension> extension(BuildTestExtension()); 75 scoped_refptr<extensions::Extension> extension(BuildTestExtension());
111 76
77 ScopedTestDialogAutoConfirm auto_confirm(ScopedTestDialogAutoConfirm::ACCEPT);
78
112 ExtensionInstallPrompt prompt(browser()->profile(), 79 ExtensionInstallPrompt prompt(browser()->profile(),
113 browser()->window()->GetNativeWindow()); 80 browser()->window()->GetNativeWindow());
114 browser()->window()->Close(); 81 browser()->window()->Close();
115 content::RunAllPendingInMessageLoop(); 82 content::RunAllPendingInMessageLoop();
116 83
117 base::RunLoop run_loop; 84 base::RunLoop run_loop;
118 TestExtensionInstallPromptDelegate delegate(run_loop.QuitClosure()); 85 ExtensionInstallPromptTestHelper helper(run_loop.QuitClosure());
119 prompt.ShowDialog(&delegate, extension.get(), nullptr, 86 prompt.ShowDialog(
120 base::Bind(&TestShowDialogCallback)); 87 helper.GetCallback(),
88 extension.get(), nullptr,
89 ExtensionInstallPrompt::GetDefaultShowDialogCallback());
121 run_loop.Run(); 90 run_loop.Run();
122 EXPECT_TRUE(delegate.DidAbort()); 91 EXPECT_EQ(ExtensionInstallPrompt::Result::ABORTED, helper.result());
123 } 92 }
124 93
125 // Test that ExtensionInstallPrompt shows the dialog normally if no parent 94 // Test that ExtensionInstallPrompt shows the dialog normally if no parent
126 // web contents or parent gfx::NativeWindow is passed to the 95 // web contents or parent gfx::NativeWindow is passed to the
127 // ExtensionInstallPrompt constructor. 96 // ExtensionInstallPrompt constructor.
128 IN_PROC_BROWSER_TEST_F(ExtensionInstallPromptBrowserTest, NoParent) { 97 IN_PROC_BROWSER_TEST_F(ExtensionInstallPromptBrowserTest, NoParent) {
129 scoped_refptr<extensions::Extension> extension(BuildTestExtension()); 98 scoped_refptr<extensions::Extension> extension(BuildTestExtension());
130 99
100 ScopedTestDialogAutoConfirm auto_confirm(ScopedTestDialogAutoConfirm::ACCEPT);
101
131 ExtensionInstallPrompt prompt(browser()->profile(), NULL); 102 ExtensionInstallPrompt prompt(browser()->profile(), NULL);
132 base::RunLoop run_loop; 103 base::RunLoop run_loop;
133 TestExtensionInstallPromptDelegate delegate(run_loop.QuitClosure()); 104 ExtensionInstallPromptTestHelper helper(run_loop.QuitClosure());
134 prompt.ShowDialog(&delegate, extension.get(), nullptr, 105 prompt.ShowDialog(
135 base::Bind(&TestShowDialogCallback)); 106 helper.GetCallback(),
107 extension.get(), nullptr,
108 ExtensionInstallPrompt::GetDefaultShowDialogCallback());
136 run_loop.Run(); 109 run_loop.Run();
137 110 EXPECT_EQ(ExtensionInstallPrompt::Result::ACCEPTED, helper.result());
138 // TestShowDialogCallback() should have signaled the install to proceed.
139 EXPECT_TRUE(delegate.DidProceed());
140 } 111 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698