1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/file_path.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/extensions/api/plugins/plugins_handler.h" 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/common/extensions/sync_helper.h" 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "extensions/common/error_utils.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest.h" 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "extensions/common/manifest_constants.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace extensions { 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace keys = manifest_keys; 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace errors = manifest_errors; 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ExtensionSyncTypeTest : public testing::Test { 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum SyncTestExtensionType { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXTENSION, 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) APP, 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) USER_SCRIPT, 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) THEME 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static scoped_refptr<Extension> MakeSyncTestExtensionWithPluginPermission( 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SyncTestExtensionType type, 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL& update_url, 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL& launch_url, 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Manifest::Location location, 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& extension_path, 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int creation_flags, 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int num_plugins, 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool has_plugin_permission, 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& expected_error) { 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue source; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source.SetString(keys::kName, "PossiblySyncableExtension"); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source.SetString(keys::kVersion, "0.0.0.0"); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (type == APP) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source.SetString(keys::kApp, "true"); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (type == THEME) 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) source.Set(keys::kTheme, new base::DictionaryValue()); 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!update_url.is_empty()) { 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source.SetString(keys::kUpdateURL, update_url.spec()); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!launch_url.is_empty()) { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source.SetString(keys::kLaunchWebURL, launch_url.spec()); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (type != THEME) { 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source.SetBoolean(keys::kConvertedFromUserScript, type == USER_SCRIPT); 54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (num_plugins >= 0) { 55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::ListValue* plugins = new base::ListValue(); 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (int i = 0; i < num_plugins; ++i) { 57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::DictionaryValue* plugin = new base::DictionaryValue(); 58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch plugin->SetString(keys::kPluginsPath, std::string()); 59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch plugins->Set(i, plugin); 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch source.Set(keys::kPlugins, plugins); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_plugin_permission) { 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* plugins = new base::ListValue(); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) plugins->Set(0, new base::StringValue("plugin")); 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source.Set(keys::kPermissions, plugins); 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension = Extension::Create( 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_path, location, source, creation_flags, &error); 73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (expected_error == "") 74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(extension.get()); 75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch else 76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_FALSE(extension.get()); 77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(expected_error, error); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return extension; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static scoped_refptr<Extension> MakeSyncTestExtension( 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SyncTestExtensionType type, 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& update_url, 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& launch_url, 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Manifest::Location location, 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath& extension_path, 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int creation_flags) { 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return MakeSyncTestExtensionWithPluginPermission( 89ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch type, update_url, launch_url, location, extension_path, 90ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch creation_flags, -1, false, ""); 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kValidUpdateUrl1[]; 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kValidUpdateUrl2[]; 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char ExtensionSyncTypeTest::kValidUpdateUrl1[] = 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://clients2.google.com/service/update2/crx"; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char ExtensionSyncTypeTest::kValidUpdateUrl2[] = 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "https://clients2.google.com/service/update2/crx"; 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, NormalExtensionNoUpdateUrl) { 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(sync_helper::IsSyncableExtension(extension.get())); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(ExtensionSyncTypeTest, UserScriptValidUpdateUrl) { 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(USER_SCRIPT, GURL(kValidUpdateUrl1), GURL(), 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(sync_helper::IsSyncableExtension(extension.get())); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, UserScriptNoUpdateUrl) { 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(USER_SCRIPT, GURL(), GURL(), 121ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncableExtension(extension.get())); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, ThemeNoUpdateUrl) { 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(THEME, GURL(), GURL(), 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncableExtension(extension.get())); 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncableApp(extension.get())); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(ExtensionSyncTypeTest, AppWithLaunchUrl) { 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(EXTENSION, GURL(), GURL("http://www.google.com"), 138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(sync_helper::IsSyncableApp(extension.get())); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, ExtensionExternal) { 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::EXTERNAL_PREF, base::FilePath(), 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncableExtension(extension.get())); 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, UserScriptThirdPartyUpdateUrl) { 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension( 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) USER_SCRIPT, GURL("http://third-party.update_url.com"), GURL(), 155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), Extension::NO_FLAGS)); 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncableExtension(extension.get())); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, OnlyDisplayAppsInLauncher) { 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 162ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(extension->ShouldDisplayInAppLauncher()); 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(extension->ShouldDisplayInNewTabPage()); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> app( 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(APP, GURL(), GURL("http://www.google.com"), 170ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(app->ShouldDisplayInAppLauncher()); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(app->ShouldDisplayInNewTabPage()); 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, DisplayInXManifestProperties) { 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue manifest; 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetString(keys::kName, "TestComponentApp"); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetString(keys::kVersion, "0.0.0.0"); 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetString(keys::kApp, "true"); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetString(keys::kPlatformAppBackgroundPage, std::string()); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error; 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> app; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Default to true. 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) app = Extension::Create( 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(), Manifest::COMPONENT, manifest, 0, &error); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(error, std::string()); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(app->ShouldDisplayInAppLauncher()); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(app->ShouldDisplayInNewTabPage()); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Value display_in_NTP defaults to display_in_launcher. 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetBoolean(keys::kDisplayInLauncher, false); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) app = Extension::Create( 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(), Manifest::COMPONENT, manifest, 0, &error); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(error, std::string()); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(app->ShouldDisplayInAppLauncher()); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(app->ShouldDisplayInNewTabPage()); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Value display_in_NTP = true overriding display_in_launcher = false. 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetBoolean(keys::kDisplayInNewTabPage, true); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) app = Extension::Create( 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(), Manifest::COMPONENT, manifest, 0, &error); 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(error, std::string()); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(app->ShouldDisplayInAppLauncher()); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(app->ShouldDisplayInNewTabPage()); 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Value display_in_NTP = false only, overrides default = true. 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.Remove(keys::kDisplayInLauncher, NULL); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetBoolean(keys::kDisplayInNewTabPage, false); 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) app = Extension::Create( 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(), Manifest::COMPONENT, manifest, 0, &error); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(error, std::string()); 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(app->ShouldDisplayInAppLauncher()); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(app->ShouldDisplayInNewTabPage()); 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Error checking. 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetString(keys::kDisplayInNewTabPage, "invalid"); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) app = Extension::Create( 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(), Manifest::COMPONENT, manifest, 0, &error); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(error, std::string(errors::kInvalidDisplayInNewTabPage)); 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, OnlySyncInternal) { 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension_internal( 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 228ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(sync_helper::IsSyncable(extension_internal.get())); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension_noninternal( 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 234ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::COMPONENT, base::FilePath(), 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::NO_FLAGS)); 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncable(extension_noninternal.get())); 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, DontSyncDefault) { 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension_default( 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 242ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::WAS_INSTALLED_BY_DEFAULT)); 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncable(extension_default.get())); 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 247ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// These plugin tests don't make sense on Chrome OS, where extension plugins 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// are not allowed. 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 250ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(ExtensionSyncTypeTest, ExtensionWithEmptyPlugins) { 251ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_refptr<Extension> extension( 252ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch MakeSyncTestExtensionWithPluginPermission( 253ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXTENSION, GURL(), GURL(), 254ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 255ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Extension::NO_FLAGS, 0, false, "")); 256ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (extension.get()) 257ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(sync_helper::IsSyncableExtension(extension.get())); 258ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 259ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, ExtensionWithPlugin) { 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 262ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch MakeSyncTestExtensionWithPluginPermission( 263ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXTENSION, GURL(), GURL(), 264ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 265ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Extension::NO_FLAGS, 1, false, "")); 266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (extension.get()) 2677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncableExtension(extension.get())); 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSyncTypeTest, ExtensionWithTwoPlugins) { 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension( 272ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch MakeSyncTestExtensionWithPluginPermission( 273ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXTENSION, GURL(), GURL(), 274ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 275ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Extension::NO_FLAGS, 2, false, "")); 276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (extension.get()) 2777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(sync_helper::IsSyncableExtension(extension.get())); 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(ExtensionSyncTypeTest, ExtensionWithPluginPermission) { 281ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Specifying the "plugin" permission in the manifest is an error. 282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<Extension> extension( 283ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch MakeSyncTestExtensionWithPluginPermission( 284ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXTENSION, GURL(), GURL(), 285ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Manifest::INTERNAL, base::FilePath(), 286ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Extension::NO_FLAGS, 0, true, 287ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ErrorUtils::FormatErrorMessage( 288ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch errors::kPermissionNotAllowedInManifest, "plugin"))); 289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 290ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // !defined(OS_CHROMEOS) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace extensions 294