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

Side by Side Diff: chrome/browser/plugins/plugin_installer_unittest.cc

Issue 230163002: Use DownloadManager to initiate downloads from PluginInstaller. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/plugins/plugin_installer.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "chrome/browser/plugins/plugin_installer.h" 5 #include "chrome/browser/plugins/plugin_installer.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "content/public/common/webplugininfo.h" 8 #include "base/run_loop.h"
9 #include "chrome/browser/plugins/plugin_installer_observer.h"
10 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
11 #include "content/public/browser/download_url_parameters.h"
12 #include "content/public/test/mock_download_item.h"
13 #include "content/public/test/mock_download_manager.h"
14 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
10 16
17 using ::testing::_;
18
19 class PluginInstallerTest : public ChromeRenderViewHostTestHarness {
20 public:
21 PluginInstallerTest();
22 virtual void SetUp() OVERRIDE;
23 virtual void TearDown() OVERRIDE;
24
25 PluginInstaller* installer() { return installer_.get(); }
26 content::DownloadItem::Observer* last_download_item_observer() {
27 return last_download_item_observer_;
28 }
29
30 scoped_ptr<content::MockDownloadItem> CreateMockDownloadItem();
31
32 private:
33 scoped_ptr<PluginInstaller> installer_;
34 content::DownloadItem::Observer* last_download_item_observer_;
35 };
36
37 PluginInstallerTest::PluginInstallerTest()
38 : last_download_item_observer_(NULL) {}
39
40 void PluginInstallerTest::SetUp() {
41 content::RenderViewHostTestHarness::SetUp();
42 installer_.reset(new PluginInstaller());
43 }
44
45 void PluginInstallerTest::TearDown() {
46 installer_.reset();
47 content::RenderViewHostTestHarness::TearDown();
48 }
49
50 scoped_ptr<content::MockDownloadItem>
51 PluginInstallerTest::CreateMockDownloadItem() {
52 scoped_ptr<content::MockDownloadItem> mock_download_item(
53 new testing::StrictMock<content::MockDownloadItem>());
54 ON_CALL(*mock_download_item, AddObserver(_))
55 .WillByDefault(testing::SaveArg<0>(&last_download_item_observer_));
56 ON_CALL(*mock_download_item, RemoveObserver(_)).WillByDefault(
57 testing::Assign(&last_download_item_observer_,
58 static_cast<content::DownloadItem::Observer*>(NULL)));
59 ON_CALL(*mock_download_item, GetState())
60 .WillByDefault(testing::Return(content::DownloadItem::IN_PROGRESS));
61 return mock_download_item.Pass();
62 }
63
64 class TestPluginInstallerObserver : public PluginInstallerObserver {
65 public:
66 explicit TestPluginInstallerObserver(PluginInstaller* installer)
67 : PluginInstallerObserver(installer),
68 download_started_(false),
69 download_finished_(false),
70 download_cancelled_(false) {}
71
72 bool download_started() const { return download_started_; }
73 bool download_finished() const { return download_finished_; }
74 bool download_cancelled() const { return download_cancelled_; }
75 const std::string& download_error() const { return download_error_; }
76
77 private:
78 virtual void DownloadStarted() OVERRIDE { download_started_ = true; }
79 virtual void DownloadFinished() OVERRIDE { download_finished_ = true; }
80 virtual void DownloadError(const std::string& message) OVERRIDE {
81 download_error_ = message;
82 }
83 virtual void DownloadCancelled() OVERRIDE { download_cancelled_ = true; }
84
85 bool download_started_;
86 bool download_finished_;
87 std::string download_error_;
88 bool download_cancelled_;
89 };
90
11 namespace { 91 namespace {
Bernhard Bauer 2014/04/10 10:26:40 Nit: move this to the top of the file?
asanka 2014/04/18 18:07:49 Done.
12 92
13 PluginInstaller::SecurityStatus GetSecurityStatus(PluginInstaller* installer, 93 // Action for invoking the OnStartedCallback of DownloadURLParameters object
14 const char* version) { 94 // which is assumed to be pointed to by arg0.
15 content:: WebPluginInfo plugin( 95 ACTION_P2(InvokeOnStartedCallback, download_item, interrupt_reason) {
16 base::ASCIIToUTF16("Foo plug-in"), 96 arg0->callback().Run(download_item, interrupt_reason);
17 base::FilePath(FILE_PATH_LITERAL("/tmp/plugin.so")), 97 }
18 base::ASCIIToUTF16(version), 98
19 base::ASCIIToUTF16("Foo plug-in.")); 99 ACTION_P(InvokeClosure, closure) {
20 return installer->GetSecurityStatus(plugin); 100 closure.Run();
21 } 101 }
102
103 const char kTestUrl[] = "http://example.com/some-url";
22 104
23 } // namespace 105 } // namespace
24 106
25 TEST(PluginInstallerTest, SecurityStatus) { 107 // Test that DownloadStarted()/DownloadFinished() notifications are sent to
Bernhard Bauer 2014/04/10 10:26:40 I'd be interested in getting this working again. D
asanka 2014/04/18 18:07:49 The test didn't compile. Also GetSecurityStatus()
Bernhard Bauer 2014/04/23 08:33:25 Oh, so the test in here was most likely left over
26 const PluginInstaller::SecurityStatus kUpToDate = 108 // observers when a download initiated by PluginInstaller completes
27 PluginInstaller::SECURITY_STATUS_UP_TO_DATE; 109 // successfully.
28 const PluginInstaller::SecurityStatus kOutOfDate = 110 TEST_F(PluginInstallerTest, StartInstalling_SuccessfulDownload) {
29 PluginInstaller::SECURITY_STATUS_OUT_OF_DATE; 111 content::MockDownloadManager mock_download_manager;
30 const PluginInstaller::SecurityStatus kRequiresAuthorization = 112 base::RunLoop run_loop;
31 PluginInstaller::SECURITY_STATUS_REQUIRES_AUTHORIZATION; 113 scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
32 114
33 PluginInstaller installer("claybrick-writer", 115 EXPECT_CALL(mock_download_manager,
34 base::ASCIIToUTF16("ClayBrick Writer"), 116 DownloadUrlMock(testing::Property(
35 true, GURL(), GURL(), 117 &content::DownloadUrlParameters::url, GURL(kTestUrl))))
36 base::ASCIIToUTF16("ClayBrick")); 118 .WillOnce(testing::DoAll(
37 119 InvokeOnStartedCallback(download_item.get(),
38 #if defined(OS_LINUX) 120 content::DOWNLOAD_INTERRUPT_REASON_NONE),
39 EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "1.2.3")); 121 InvokeClosure(run_loop.QuitClosure())));
40 #else 122 EXPECT_CALL(*download_item, AddObserver(_));
41 EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "1.2.3")); 123 EXPECT_CALL(*download_item, SetOpenWhenComplete(_));
42 #endif 124
43 125 TestPluginInstallerObserver installer_observer(installer());
44 installer.AddVersion(Version("9.4.1"), kRequiresAuthorization); 126 installer()->StartInstallingWithDownloadManager(
45 installer.AddVersion(Version("10"), kOutOfDate); 127 GURL(kTestUrl), web_contents(), &mock_download_manager);
46 installer.AddVersion(Version("10.2.1"), kUpToDate); 128 run_loop.Run();
47 129
48 // Invalid version. 130 ASSERT_TRUE(last_download_item_observer());
49 EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "foo")); 131 EXPECT_TRUE(installer_observer.download_started());
50 132 EXPECT_FALSE(installer_observer.download_finished());
51 EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "0")); 133
52 EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "1.2.3")); 134 EXPECT_CALL(*download_item, GetState())
53 EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "9.4.1")); 135 .WillOnce(testing::Return(content::DownloadItem::COMPLETE));
54 EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "9.4.2")); 136 EXPECT_CALL(*download_item, RemoveObserver(_));
55 EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "10.2.0")); 137 last_download_item_observer()->OnDownloadUpdated(download_item.get());
56 EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "10.2.1")); 138 EXPECT_TRUE(installer_observer.download_finished());
57 EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "11")); 139 }
58 } 140
141 // Test that DownloadStarted()/DownloadError() notifications are sent to
142 // observers when a download initiated by PluginInstaller fails to start.
143 TEST_F(PluginInstallerTest, StartInstalling_FailedStart) {
144 content::MockDownloadManager mock_download_manager;
145 base::RunLoop run_loop;
146 scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
147
148 EXPECT_CALL(mock_download_manager,
149 DownloadUrlMock(testing::Property(
150 &content::DownloadUrlParameters::url, GURL(kTestUrl))))
151 .WillOnce(
152 testing::DoAll(InvokeOnStartedCallback(
153 download_item.get(),
154 content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED),
155 InvokeClosure(run_loop.QuitClosure())));
156
157 TestPluginInstallerObserver installer_observer(installer());
158 installer()->StartInstallingWithDownloadManager(
159 GURL(kTestUrl), web_contents(), &mock_download_manager);
160 run_loop.Run();
161
162 EXPECT_FALSE(last_download_item_observer());
163 EXPECT_TRUE(installer_observer.download_started());
164 EXPECT_FALSE(installer_observer.download_finished());
165 EXPECT_EQ("Error 20: NETWORK_FAILED", installer_observer.download_error());
166 }
167
168 // Test that DownloadStarted()/DownloadError() notifications are sent to
169 // observers when a download initiated by PluginInstaller starts successfully
170 // but is interrupted later.
171 TEST_F(PluginInstallerTest, StartInstalling_Interrupted) {
172 content::MockDownloadManager mock_download_manager;
173 base::RunLoop run_loop;
174 scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
175
176 EXPECT_CALL(mock_download_manager,
177 DownloadUrlMock(testing::Property(
178 &content::DownloadUrlParameters::url, GURL(kTestUrl))))
179 .WillOnce(testing::DoAll(
180 InvokeOnStartedCallback(download_item.get(),
181 content::DOWNLOAD_INTERRUPT_REASON_NONE),
182 InvokeClosure(run_loop.QuitClosure())));
183 EXPECT_CALL(*download_item, AddObserver(_));
184 EXPECT_CALL(*download_item, SetOpenWhenComplete(_));
185
186 TestPluginInstallerObserver installer_observer(installer());
187 installer()->StartInstallingWithDownloadManager(
188 GURL(kTestUrl), web_contents(), &mock_download_manager);
189 run_loop.Run();
190
191 ASSERT_TRUE(last_download_item_observer());
192 EXPECT_TRUE(installer_observer.download_started());
193 EXPECT_FALSE(installer_observer.download_finished());
194
195 EXPECT_CALL(*download_item, GetState())
196 .WillOnce(testing::Return(content::DownloadItem::INTERRUPTED));
197 EXPECT_CALL(*download_item, RemoveObserver(_));
198 EXPECT_CALL(*download_item, GetLastReason()).WillOnce(
199 testing::Return(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED));
200 last_download_item_observer()->OnDownloadUpdated(download_item.get());
201
202 EXPECT_FALSE(last_download_item_observer());
203 EXPECT_TRUE(installer_observer.download_started());
204 EXPECT_FALSE(installer_observer.download_finished());
205 EXPECT_EQ("NETWORK_FAILED", installer_observer.download_error());
206 }
OLDNEW
« no previous file with comments | « chrome/browser/plugins/plugin_installer.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698