| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/ui/app_list/drive/drive_app_converter.h" | |
| 6 | |
| 7 #include <utility> | |
| 8 | |
| 9 #include "base/bind.h" | |
| 10 #include "base/memory/scoped_ptr.h" | |
| 11 #include "base/path_service.h" | |
| 12 #include "base/version.h" | |
| 13 #include "chrome/browser/extensions/extension_browsertest.h" | |
| 14 #include "chrome/browser/extensions/extension_service.h" | |
| 15 #include "chrome/common/chrome_paths.h" | |
| 16 #include "chrome/common/extensions/extension_constants.h" | |
| 17 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" | |
| 18 #include "content/public/test/test_utils.h" | |
| 19 #include "extensions/browser/extension_system.h" | |
| 20 #include "extensions/common/extension.h" | |
| 21 #include "extensions/common/manifest_handlers/icons_handler.h" | |
| 22 #include "extensions/common/permissions/permission_set.h" | |
| 23 #include "net/test/embedded_test_server/embedded_test_server.h" | |
| 24 #include "testing/gtest/include/gtest/gtest.h" | |
| 25 | |
| 26 namespace { | |
| 27 | |
| 28 const char kAppName[] = "Test drive app"; | |
| 29 const char kAppUrl[] = "http://foobar.com/drive_app"; | |
| 30 | |
| 31 } // namespace | |
| 32 | |
| 33 class DriveAppConverterTest : public ExtensionBrowserTest { | |
| 34 public: | |
| 35 DriveAppConverterTest() {} | |
| 36 virtual ~DriveAppConverterTest() {} | |
| 37 | |
| 38 // ExtensionBrowserTest: | |
| 39 virtual void SetUpOnMainThread() OVERRIDE { | |
| 40 ExtensionBrowserTest::SetUpOnMainThread(); | |
| 41 | |
| 42 base::FilePath test_data_dir; | |
| 43 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); | |
| 44 embedded_test_server()->ServeFilesFromDirectory(test_data_dir); | |
| 45 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | |
| 46 } | |
| 47 | |
| 48 void InstallAndWaitFinish(const drive::DriveAppInfo& drive_app) { | |
| 49 runner_ = new content::MessageLoopRunner; | |
| 50 | |
| 51 converter_.reset(new DriveAppConverter( | |
| 52 profile(), | |
| 53 drive_app, | |
| 54 base::Bind(&DriveAppConverterTest::ConverterFinished, | |
| 55 base::Unretained(this)))); | |
| 56 converter_->Start(); | |
| 57 | |
| 58 runner_->Run(); | |
| 59 } | |
| 60 | |
| 61 GURL GetTestUrl(const std::string& path) { | |
| 62 return embedded_test_server()->base_url().Resolve(path); | |
| 63 } | |
| 64 | |
| 65 drive::DriveAppInfo GetTestDriveApp() { | |
| 66 // Define four icons. icon1.png is 16x16 and good to use. icon2.png is | |
| 67 // 16x16 but claims to be 32x32 and should be dropped. icon3.png is 66x66 | |
| 68 // and not a valid extension icon size and should be dropped too. The forth | |
| 69 // one is icon2.png with 16x16 but should be ignored because 16x16 already | |
| 70 // has icon1.png as its resource. | |
| 71 drive::DriveAppInfo::IconList app_icons; | |
| 72 app_icons.push_back(std::make_pair(16, GetTestUrl("extensions/icon1.png"))); | |
| 73 app_icons.push_back(std::make_pair(32, GetTestUrl("extensions/icon2.png"))); | |
| 74 app_icons.push_back(std::make_pair(66, GetTestUrl("extensions/icon3.png"))); | |
| 75 app_icons.push_back(std::make_pair(16, GetTestUrl("extensions/icon2.png"))); | |
| 76 | |
| 77 drive::DriveAppInfo::IconList document_icons; | |
| 78 | |
| 79 return drive::DriveAppInfo("fake_drive_app_id", | |
| 80 "fake_product_id", | |
| 81 app_icons, | |
| 82 document_icons, | |
| 83 kAppName, | |
| 84 GURL(kAppUrl), | |
| 85 true); | |
| 86 } | |
| 87 | |
| 88 const DriveAppConverter* converter() const { return converter_.get(); } | |
| 89 | |
| 90 private: | |
| 91 void ConverterFinished(const DriveAppConverter* converter, bool success) { | |
| 92 if (runner_) | |
| 93 runner_->Quit(); | |
| 94 } | |
| 95 | |
| 96 scoped_ptr<DriveAppConverter> converter_; | |
| 97 scoped_refptr<content::MessageLoopRunner> runner_; | |
| 98 | |
| 99 DISALLOW_COPY_AND_ASSIGN(DriveAppConverterTest); | |
| 100 }; | |
| 101 | |
| 102 IN_PROC_BROWSER_TEST_F(DriveAppConverterTest, GoodApp) { | |
| 103 InstallAndWaitFinish(GetTestDriveApp()); | |
| 104 | |
| 105 const extensions::Extension* app = converter()->app(); | |
| 106 ASSERT_TRUE(app != NULL); | |
| 107 EXPECT_EQ(kAppName, app->name()); | |
| 108 EXPECT_TRUE(app->is_hosted_app()); | |
| 109 EXPECT_TRUE(app->from_bookmark()); | |
| 110 EXPECT_EQ(GURL(kAppUrl), extensions::AppLaunchInfo::GetLaunchWebURL(app)); | |
| 111 EXPECT_EQ(extensions::LAUNCH_CONTAINER_TAB, | |
| 112 extensions::AppLaunchInfo::GetLaunchContainer(app)); | |
| 113 EXPECT_EQ(0u, app->GetActivePermissions()->apis().size()); | |
| 114 EXPECT_EQ(1u, extensions::IconsInfo::GetIcons(app).map().size()); | |
| 115 | |
| 116 const extensions::Extension* installed = | |
| 117 extensions::ExtensionSystem::Get(profile()) | |
| 118 ->extension_service() | |
| 119 ->GetInstalledExtension(app->id()); | |
| 120 EXPECT_EQ(app, installed); | |
| 121 } | |
| 122 | |
| 123 IN_PROC_BROWSER_TEST_F(DriveAppConverterTest, BadApp) { | |
| 124 drive::DriveAppInfo no_name = GetTestDriveApp(); | |
| 125 no_name.app_name.clear(); | |
| 126 InstallAndWaitFinish(no_name); | |
| 127 EXPECT_TRUE(converter()->app() == NULL); | |
| 128 | |
| 129 drive::DriveAppInfo no_url = GetTestDriveApp(); | |
| 130 no_url.create_url = GURL(); | |
| 131 InstallAndWaitFinish(no_url); | |
| 132 EXPECT_TRUE(converter()->app() == NULL); | |
| 133 } | |
| 134 | |
| 135 IN_PROC_BROWSER_TEST_F(DriveAppConverterTest, InstallTwice) { | |
| 136 InstallAndWaitFinish(GetTestDriveApp()); | |
| 137 const extensions::Extension* first_install = converter()->app(); | |
| 138 ASSERT_TRUE(first_install != NULL); | |
| 139 const std::string first_install_id = first_install->id(); | |
| 140 const base::Version first_install_version(first_install->VersionString()); | |
| 141 ASSERT_TRUE(first_install_version.IsValid()); | |
| 142 | |
| 143 InstallAndWaitFinish(GetTestDriveApp()); | |
| 144 const extensions::Extension* second_install = converter()->app(); | |
| 145 ASSERT_TRUE(second_install != NULL); | |
| 146 | |
| 147 // Two different app instances. | |
| 148 ASSERT_NE(first_install, second_install); | |
| 149 EXPECT_EQ(first_install_id, second_install->id()); | |
| 150 EXPECT_GE(second_install->version()->CompareTo(first_install_version), 0); | |
| 151 } | |
| OLD | NEW |