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

Unified 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: Address comments. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/plugins/plugin_installer.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/plugins/plugin_installer_unittest.cc
diff --git a/chrome/browser/plugins/plugin_installer_unittest.cc b/chrome/browser/plugins/plugin_installer_unittest.cc
index ea450d8c753a1a266cf549d774607104f2be0e48..cfd44d602b39eaf651bcf2ada355c515a67f660c 100644
--- a/chrome/browser/plugins/plugin_installer_unittest.cc
+++ b/chrome/browser/plugins/plugin_installer_unittest.cc
@@ -4,55 +4,203 @@
#include "chrome/browser/plugins/plugin_installer.h"
-#include "base/strings/utf_string_conversions.h"
-#include "content/public/common/webplugininfo.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/run_loop.h"
+#include "chrome/browser/plugins/plugin_installer_observer.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "content/public/browser/download_url_parameters.h"
+#include "content/public/test/mock_download_item.h"
+#include "content/public/test/mock_download_manager.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+using ::testing::_;
+
namespace {
-PluginInstaller::SecurityStatus GetSecurityStatus(PluginInstaller* installer,
- const char* version) {
- content:: WebPluginInfo plugin(
- base::ASCIIToUTF16("Foo plug-in"),
- base::FilePath(FILE_PATH_LITERAL("/tmp/plugin.so")),
- base::ASCIIToUTF16(version),
- base::ASCIIToUTF16("Foo plug-in."));
- return installer->GetSecurityStatus(plugin);
+class PluginInstallerTest : public ChromeRenderViewHostTestHarness {
+ public:
+ PluginInstallerTest();
+ virtual void SetUp() OVERRIDE;
+ virtual void TearDown() OVERRIDE;
+
+ PluginInstaller* installer() { return installer_.get(); }
+ content::DownloadItem::Observer* last_download_item_observer() {
+ return last_download_item_observer_;
+ }
+
+ scoped_ptr<content::MockDownloadItem> CreateMockDownloadItem();
+
+ private:
+ scoped_ptr<PluginInstaller> installer_;
+ content::DownloadItem::Observer* last_download_item_observer_;
+};
+
+PluginInstallerTest::PluginInstallerTest()
+ : last_download_item_observer_(NULL) {}
+
+void PluginInstallerTest::SetUp() {
+ content::RenderViewHostTestHarness::SetUp();
+ installer_.reset(new PluginInstaller());
+}
+
+void PluginInstallerTest::TearDown() {
+ installer_.reset();
+ content::RenderViewHostTestHarness::TearDown();
+}
+
+scoped_ptr<content::MockDownloadItem>
+PluginInstallerTest::CreateMockDownloadItem() {
+ scoped_ptr<content::MockDownloadItem> mock_download_item(
+ new testing::StrictMock<content::MockDownloadItem>());
+ ON_CALL(*mock_download_item, AddObserver(_))
+ .WillByDefault(testing::SaveArg<0>(&last_download_item_observer_));
+ ON_CALL(*mock_download_item, RemoveObserver(_)).WillByDefault(
+ testing::Assign(&last_download_item_observer_,
+ static_cast<content::DownloadItem::Observer*>(NULL)));
+ ON_CALL(*mock_download_item, GetState())
+ .WillByDefault(testing::Return(content::DownloadItem::IN_PROGRESS));
+ return mock_download_item.Pass();
+}
+
+class TestPluginInstallerObserver : public PluginInstallerObserver {
+ public:
+ explicit TestPluginInstallerObserver(PluginInstaller* installer)
+ : PluginInstallerObserver(installer),
+ download_started_(false),
+ download_finished_(false),
+ download_cancelled_(false) {}
+
+ bool download_started() const { return download_started_; }
+ bool download_finished() const { return download_finished_; }
+ bool download_cancelled() const { return download_cancelled_; }
+ const std::string& download_error() const { return download_error_; }
+
+ private:
+ virtual void DownloadStarted() OVERRIDE { download_started_ = true; }
+ virtual void DownloadFinished() OVERRIDE { download_finished_ = true; }
+ virtual void DownloadError(const std::string& message) OVERRIDE {
+ download_error_ = message;
+ }
+ virtual void DownloadCancelled() OVERRIDE { download_cancelled_ = true; }
+
+ bool download_started_;
+ bool download_finished_;
+ std::string download_error_;
+ bool download_cancelled_;
+};
+
+// Action for invoking the OnStartedCallback of DownloadURLParameters object
+// which is assumed to be pointed to by arg0.
+ACTION_P2(InvokeOnStartedCallback, download_item, interrupt_reason) {
+ arg0->callback().Run(download_item, interrupt_reason);
+}
+
+ACTION_P(InvokeClosure, closure) {
+ closure.Run();
}
+const char kTestUrl[] = "http://example.com/some-url";
+
} // namespace
-TEST(PluginInstallerTest, SecurityStatus) {
- const PluginInstaller::SecurityStatus kUpToDate =
- PluginInstaller::SECURITY_STATUS_UP_TO_DATE;
- const PluginInstaller::SecurityStatus kOutOfDate =
- PluginInstaller::SECURITY_STATUS_OUT_OF_DATE;
- const PluginInstaller::SecurityStatus kRequiresAuthorization =
- PluginInstaller::SECURITY_STATUS_REQUIRES_AUTHORIZATION;
-
- PluginInstaller installer("claybrick-writer",
- base::ASCIIToUTF16("ClayBrick Writer"),
- true, GURL(), GURL(),
- base::ASCIIToUTF16("ClayBrick"));
-
-#if defined(OS_LINUX)
- EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "1.2.3"));
-#else
- EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "1.2.3"));
-#endif
-
- installer.AddVersion(Version("9.4.1"), kRequiresAuthorization);
- installer.AddVersion(Version("10"), kOutOfDate);
- installer.AddVersion(Version("10.2.1"), kUpToDate);
-
- // Invalid version.
- EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "foo"));
-
- EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "0"));
- EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "1.2.3"));
- EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "9.4.1"));
- EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "9.4.2"));
- EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "10.2.0"));
- EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "10.2.1"));
- EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "11"));
+// Test that DownloadStarted()/DownloadFinished() notifications are sent to
+// observers when a download initiated by PluginInstaller completes
+// successfully.
+TEST_F(PluginInstallerTest, StartInstalling_SuccessfulDownload) {
+ content::MockDownloadManager mock_download_manager;
+ base::RunLoop run_loop;
+ scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
+
+ EXPECT_CALL(mock_download_manager,
+ DownloadUrlMock(testing::Property(
+ &content::DownloadUrlParameters::url, GURL(kTestUrl))))
+ .WillOnce(testing::DoAll(
+ InvokeOnStartedCallback(download_item.get(),
+ content::DOWNLOAD_INTERRUPT_REASON_NONE),
+ InvokeClosure(run_loop.QuitClosure())));
+ EXPECT_CALL(*download_item, AddObserver(_));
+ EXPECT_CALL(*download_item, SetOpenWhenComplete(_));
+
+ TestPluginInstallerObserver installer_observer(installer());
+ installer()->StartInstallingWithDownloadManager(
+ GURL(kTestUrl), web_contents(), &mock_download_manager);
+ run_loop.Run();
+
+ ASSERT_TRUE(last_download_item_observer());
+ EXPECT_TRUE(installer_observer.download_started());
+ EXPECT_FALSE(installer_observer.download_finished());
+
+ EXPECT_CALL(*download_item, GetState())
+ .WillOnce(testing::Return(content::DownloadItem::COMPLETE));
+ EXPECT_CALL(*download_item, RemoveObserver(_));
+ last_download_item_observer()->OnDownloadUpdated(download_item.get());
+ EXPECT_TRUE(installer_observer.download_finished());
+}
+
+// Test that DownloadStarted()/DownloadError() notifications are sent to
+// observers when a download initiated by PluginInstaller fails to start.
+TEST_F(PluginInstallerTest, StartInstalling_FailedStart) {
+ content::MockDownloadManager mock_download_manager;
+ base::RunLoop run_loop;
+ scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
+
+ EXPECT_CALL(mock_download_manager,
+ DownloadUrlMock(testing::Property(
+ &content::DownloadUrlParameters::url, GURL(kTestUrl))))
+ .WillOnce(
+ testing::DoAll(InvokeOnStartedCallback(
+ download_item.get(),
+ content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED),
+ InvokeClosure(run_loop.QuitClosure())));
+
+ TestPluginInstallerObserver installer_observer(installer());
+ installer()->StartInstallingWithDownloadManager(
+ GURL(kTestUrl), web_contents(), &mock_download_manager);
+ run_loop.Run();
+
+ EXPECT_FALSE(last_download_item_observer());
+ EXPECT_TRUE(installer_observer.download_started());
+ EXPECT_FALSE(installer_observer.download_finished());
+ EXPECT_EQ("Error 20: NETWORK_FAILED", installer_observer.download_error());
+}
+
+// Test that DownloadStarted()/DownloadError() notifications are sent to
+// observers when a download initiated by PluginInstaller starts successfully
+// but is interrupted later.
+TEST_F(PluginInstallerTest, StartInstalling_Interrupted) {
+ content::MockDownloadManager mock_download_manager;
+ base::RunLoop run_loop;
+ scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
+
+ EXPECT_CALL(mock_download_manager,
+ DownloadUrlMock(testing::Property(
+ &content::DownloadUrlParameters::url, GURL(kTestUrl))))
+ .WillOnce(testing::DoAll(
+ InvokeOnStartedCallback(download_item.get(),
+ content::DOWNLOAD_INTERRUPT_REASON_NONE),
+ InvokeClosure(run_loop.QuitClosure())));
+ EXPECT_CALL(*download_item, AddObserver(_));
+ EXPECT_CALL(*download_item, SetOpenWhenComplete(_));
+
+ TestPluginInstallerObserver installer_observer(installer());
+ installer()->StartInstallingWithDownloadManager(
+ GURL(kTestUrl), web_contents(), &mock_download_manager);
+ run_loop.Run();
+
+ ASSERT_TRUE(last_download_item_observer());
+ EXPECT_TRUE(installer_observer.download_started());
+ EXPECT_FALSE(installer_observer.download_finished());
+
+ EXPECT_CALL(*download_item, GetState())
+ .WillOnce(testing::Return(content::DownloadItem::INTERRUPTED));
+ EXPECT_CALL(*download_item, RemoveObserver(_));
+ EXPECT_CALL(*download_item, GetLastReason()).WillOnce(
+ testing::Return(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED));
+ last_download_item_observer()->OnDownloadUpdated(download_item.get());
+
+ EXPECT_FALSE(last_download_item_observer());
+ EXPECT_TRUE(installer_observer.download_started());
+ EXPECT_FALSE(installer_observer.download_finished());
+ EXPECT_EQ("NETWORK_FAILED", installer_observer.download_error());
}
« 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