X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fchrome%2Fbrowser%2Fplugins%2Fplugin_installer_unittest.cc;h=cfd44d602b39eaf651bcf2ada355c515a67f660c;hb=004985e17e624662a4c85c76a7654039dc83f028;hp=ea450d8c753a1a266cf549d774607104f2be0e48;hpb=2f108dbacb161091e42a3479f4e171339b7e7623;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/chrome/browser/plugins/plugin_installer_unittest.cc b/src/chrome/browser/plugins/plugin_installer_unittest.cc index ea450d8..cfd44d6 100644 --- a/src/chrome/browser/plugins/plugin_installer_unittest.cc +++ b/src/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 CreateMockDownloadItem(); + + private: + scoped_ptr 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 +PluginInstallerTest::CreateMockDownloadItem() { + scoped_ptr mock_download_item( + new testing::StrictMock()); + 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(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 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 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 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()); }