diff options
Diffstat (limited to 'chrome/browser/profile_resetter/profile_resetter_unittest.cc')
-rw-r--r-- | chrome/browser/profile_resetter/profile_resetter_unittest.cc | 281 |
1 files changed, 35 insertions, 246 deletions
diff --git a/chrome/browser/profile_resetter/profile_resetter_unittest.cc b/chrome/browser/profile_resetter/profile_resetter_unittest.cc index f976ec6..08f204a 100644 --- a/chrome/browser/profile_resetter/profile_resetter_unittest.cc +++ b/chrome/browser/profile_resetter/profile_resetter_unittest.cc @@ -7,7 +7,6 @@ #include "base/json/json_string_value_serializer.h" #include "base/prefs/pref_service.h" #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_path_override.h" #include "chrome/browser/content_settings/host_content_settings_map.h" #include "chrome/browser/extensions/extension_service_unittest.h" #include "chrome/browser/extensions/tab_helper.h" @@ -34,16 +33,7 @@ #include "net/url_request/url_request_status.h" #include "url/gurl.h" -#if defined(OS_WIN) -#include "base/file_util.h" -#include "base/path_service.h" -#include "base/process/process_handle.h" -#include "base/rand_util.h" -#include "base/strings/string_number_conversions.h" -#include "base/win/scoped_com_initializer.h" -#include "base/win/shortcut.h" -#endif - +using base::ASCIIToUTF16; namespace { @@ -95,10 +85,6 @@ using extensions::Manifest; // ProfileResetterTest sets up the extension, WebData and TemplateURL services. class ProfileResetterTest : public ExtensionServiceTestBase, public ProfileResetterTestBase { - public: - ProfileResetterTest(); - virtual ~ProfileResetterTest(); - protected: virtual void SetUp() OVERRIDE; @@ -106,29 +92,8 @@ class ProfileResetterTest : public ExtensionServiceTestBase, static BrowserContextKeyedService* CreateTemplateURLService( content::BrowserContext* context); - - private: -#if defined(OS_WIN) - base::ScopedPathOverride user_desktop_override_; - base::ScopedPathOverride app_dir_override_; - base::ScopedPathOverride start_menu_override_; - base::ScopedPathOverride taskbar_pins_override_; - base::win::ScopedCOMInitializer com_init_; -#endif }; -ProfileResetterTest::ProfileResetterTest() -#if defined(OS_WIN) - : user_desktop_override_(base::DIR_USER_DESKTOP), - app_dir_override_(base::DIR_APP_DATA), - start_menu_override_(base::DIR_START_MENU), - taskbar_pins_override_(base::DIR_TASKBAR_PINS) -#endif -{} - -ProfileResetterTest::~ProfileResetterTest() { -} - void ProfileResetterTest::SetUp() { ExtensionServiceTestBase::SetUp(); InitializeEmptyExtensionService(); @@ -265,99 +230,6 @@ scoped_ptr<net::FakeURLFetcher> ConfigParserTest::CreateFakeURLFetcher( return fetcher.Pass(); } -// A helper class to create/delete/check a Chrome desktop shortcut on Windows. -class ShortcutHandler { - public: - ShortcutHandler(); - ~ShortcutHandler(); - - static bool IsSupported(); - ShortcutCommand CreateWithArguments(const base::string16& name, - const base::string16& args); - void CheckShortcutHasArguments(const base::string16& desired_args) const; - void Delete(); - - private: -#if defined(OS_WIN) - base::FilePath shortcut_path_; -#endif - DISALLOW_COPY_AND_ASSIGN(ShortcutHandler); -}; - -#if defined(OS_WIN) -ShortcutHandler::ShortcutHandler() { -} - -ShortcutHandler::~ShortcutHandler() { - if (!shortcut_path_.empty()) - Delete(); -} - -// static -bool ShortcutHandler::IsSupported() { - return true; -} - -ShortcutCommand ShortcutHandler::CreateWithArguments( - const base::string16& name, - const base::string16& args) { - EXPECT_TRUE(shortcut_path_.empty()); - base::FilePath path_to_create; - EXPECT_TRUE(PathService::Get(base::DIR_USER_DESKTOP, &path_to_create)); - path_to_create = path_to_create.Append(name); - EXPECT_FALSE(base::PathExists(path_to_create)) << path_to_create.value(); - - base::FilePath path_exe; - EXPECT_TRUE(PathService::Get(base::FILE_EXE, &path_exe)); - base::win::ShortcutProperties shortcut_properties; - shortcut_properties.set_target(path_exe); - shortcut_properties.set_arguments(args); - EXPECT_TRUE(base::win::CreateOrUpdateShortcutLink( - path_to_create, shortcut_properties, - base::win::SHORTCUT_CREATE_ALWAYS)) << path_to_create.value(); - shortcut_path_ = path_to_create; - return ShortcutCommand(shortcut_path_, - args); -} - -void ShortcutHandler::CheckShortcutHasArguments( - const base::string16& desired_args) const { - EXPECT_FALSE(shortcut_path_.empty()); - base::FilePath target_path; - base::string16 args; - EXPECT_TRUE(base::win::ResolveShortcut(shortcut_path_, &target_path, &args)); - EXPECT_EQ(desired_args, args); -} - -void ShortcutHandler::Delete() { - EXPECT_FALSE(shortcut_path_.empty()); - EXPECT_TRUE(base::DeleteFile(shortcut_path_, false)); - shortcut_path_.clear(); -} -#else -ShortcutHandler::ShortcutHandler() {} - -ShortcutHandler::~ShortcutHandler() {} - -// static -bool ShortcutHandler::IsSupported() { - return false; -} - -ShortcutCommand ShortcutHandler::CreateWithArguments( - const base::string16& name, - const base::string16& args) { - return ShortcutCommand(); -} - -void ShortcutHandler::CheckShortcutHasArguments( - const base::string16& desired_args) const { -} - -void ShortcutHandler::Delete() { -} -#endif // defined(OS_WIN) - // helper functions ----------------------------------------------------------- @@ -427,8 +299,8 @@ TEST_F(ProfileResetterTest, ResetDefaultSearchEngineNonOrganic) { TemplateURLServiceFactory::GetForProfile(profile()); TemplateURL* default_engine = model->GetDefaultSearchProvider(); ASSERT_NE(static_cast<TemplateURL*>(NULL), default_engine); - EXPECT_EQ(base::ASCIIToUTF16("first"), default_engine->short_name()); - EXPECT_EQ(base::ASCIIToUTF16("firstkey"), default_engine->keyword()); + EXPECT_EQ(ASCIIToUTF16("first"), default_engine->short_name()); + EXPECT_EQ(ASCIIToUTF16("firstkey"), default_engine->keyword()); EXPECT_EQ("http://www.foo.com/s?q={searchTerms}", default_engine->url()); EXPECT_EQ("", prefs->GetString(prefs::kLastPromptedGoogleURL)); @@ -585,7 +457,7 @@ TEST_F(ProfileResetterTest, ResetExtensionsByDisabling) { ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); scoped_refptr<Extension> theme = - CreateExtension(base::ASCIIToUTF16("example1"), + CreateExtension(ASCIIToUTF16("example1"), temp_dir.path(), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_THEME, @@ -599,7 +471,7 @@ TEST_F(ProfileResetterTest, ResetExtensionsByDisabling) { EXPECT_FALSE(theme_service->UsingDefaultTheme()); scoped_refptr<Extension> ext2 = CreateExtension( - base::ASCIIToUTF16("example2"), + ASCIIToUTF16("example2"), base::FilePath(FILE_PATH_LITERAL("//nonexistent")), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_EXTENSION, @@ -607,28 +479,28 @@ TEST_F(ProfileResetterTest, ResetExtensionsByDisabling) { service_->AddExtension(ext2.get()); // Component extensions and policy-managed extensions shouldn't be disabled. scoped_refptr<Extension> ext3 = CreateExtension( - base::ASCIIToUTF16("example3"), + ASCIIToUTF16("example3"), base::FilePath(FILE_PATH_LITERAL("//nonexistent2")), Manifest::COMPONENT, extensions::Manifest::TYPE_EXTENSION, false); service_->AddExtension(ext3.get()); - scoped_refptr<Extension> ext4 = - CreateExtension(base::ASCIIToUTF16("example4"), - base::FilePath(FILE_PATH_LITERAL("//nonexistent3")), - Manifest::EXTERNAL_POLICY_DOWNLOAD, - extensions::Manifest::TYPE_EXTENSION, - false); + scoped_refptr<Extension> ext4 = CreateExtension( + ASCIIToUTF16("example4"), + base::FilePath(FILE_PATH_LITERAL("//nonexistent3")), + Manifest::EXTERNAL_POLICY_DOWNLOAD, + extensions::Manifest::TYPE_EXTENSION, + false); service_->AddExtension(ext4.get()); scoped_refptr<Extension> ext5 = CreateExtension( - base::ASCIIToUTF16("example5"), + ASCIIToUTF16("example5"), base::FilePath(FILE_PATH_LITERAL("//nonexistent4")), Manifest::EXTERNAL_COMPONENT, extensions::Manifest::TYPE_EXTENSION, false); service_->AddExtension(ext5.get()); scoped_refptr<Extension> ext6 = CreateExtension( - base::ASCIIToUTF16("example6"), + ASCIIToUTF16("example6"), base::FilePath(FILE_PATH_LITERAL("//nonexistent5")), Manifest::EXTERNAL_POLICY, extensions::Manifest::TYPE_EXTENSION, @@ -649,7 +521,7 @@ TEST_F(ProfileResetterTest, ResetExtensionsByDisabling) { TEST_F(ProfileResetterTest, ResetExtensionsByDisablingNonOrganic) { scoped_refptr<Extension> ext2 = CreateExtension( - base::ASCIIToUTF16("example2"), + ASCIIToUTF16("example2"), base::FilePath(FILE_PATH_LITERAL("//nonexistent")), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_EXTENSION, @@ -657,7 +529,7 @@ TEST_F(ProfileResetterTest, ResetExtensionsByDisablingNonOrganic) { service_->AddExtension(ext2.get()); // Components and external policy extensions shouldn't be deleted. scoped_refptr<Extension> ext3 = CreateExtension( - base::ASCIIToUTF16("example3"), + ASCIIToUTF16("example3"), base::FilePath(FILE_PATH_LITERAL("//nonexistent2")), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_EXTENSION, @@ -681,7 +553,7 @@ TEST_F(ProfileResetterTest, ResetExtensionsAndDefaultApps) { ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); scoped_refptr<Extension> ext1 = - CreateExtension(base::ASCIIToUTF16("example1"), + CreateExtension(ASCIIToUTF16("example1"), temp_dir.path(), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_THEME, @@ -695,7 +567,7 @@ TEST_F(ProfileResetterTest, ResetExtensionsAndDefaultApps) { EXPECT_FALSE(theme_service->UsingDefaultTheme()); scoped_refptr<Extension> ext2 = - CreateExtension(base::ASCIIToUTF16("example2"), + CreateExtension(ASCIIToUTF16("example2"), base::FilePath(FILE_PATH_LITERAL("//nonexistent2")), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_EXTENSION, @@ -703,7 +575,7 @@ TEST_F(ProfileResetterTest, ResetExtensionsAndDefaultApps) { service_->AddExtension(ext2.get()); scoped_refptr<Extension> ext3 = - CreateExtension(base::ASCIIToUTF16("example2"), + CreateExtension(ASCIIToUTF16("example2"), base::FilePath(FILE_PATH_LITERAL("//nonexistent3")), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_HOSTED_APP, @@ -754,7 +626,7 @@ TEST_F(ProfileResetterTest, ResetStartPagePartially) { TEST_F(PinnedTabsResetTest, ResetPinnedTabs) { scoped_refptr<Extension> extension_app = CreateExtension( - base::ASCIIToUTF16("hello!"), + ASCIIToUTF16("hello!"), base::FilePath(FILE_PATH_LITERAL("//nonexistent")), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_HOSTED_APP, @@ -790,20 +662,6 @@ TEST_F(PinnedTabsResetTest, ResetPinnedTabs) { EXPECT_EQ(1, tab_strip_model->IndexOfFirstNonMiniTab()); } -TEST_F(ProfileResetterTest, ResetShortcuts) { - ShortcutHandler shortcut; - ShortcutCommand command_line = shortcut.CreateWithArguments( - base::ASCIIToUTF16("chrome.lnk"), - base::ASCIIToUTF16("--profile-directory=Default foo.com")); - shortcut.CheckShortcutHasArguments(base::ASCIIToUTF16( - "--profile-directory=Default foo.com")); - - ResetAndWait(ProfileResetter::SHORTCUTS); - - shortcut.CheckShortcutHasArguments(base::ASCIIToUTF16( - "--profile-directory=Default")); -} - TEST_F(ProfileResetterTest, ResetFewFlags) { // mock_object_ is a StrictMock, so we verify that it is called only once. ResetAndWait(ProfileResetter::DEFAULT_SEARCH_ENGINE | @@ -861,11 +719,11 @@ TEST_F(ConfigParserTest, ParseConfig) { } TEST_F(ProfileResetterTest, CheckSnapshots) { - ResettableSettingsSnapshot empty_snap(profile(), false); + ResettableSettingsSnapshot empty_snap(profile()); EXPECT_EQ(0, empty_snap.FindDifferentFields(empty_snap)); scoped_refptr<Extension> ext = CreateExtension( - base::ASCIIToUTF16("example"), + ASCIIToUTF16("example"), base::FilePath(FILE_PATH_LITERAL("//nonexistent")), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_EXTENSION, @@ -882,24 +740,9 @@ TEST_F(ProfileResetterTest, CheckSnapshots) { ProfileResetter::HOMEPAGE | ProfileResetter::STARTUP_PAGES, master_prefs); - ShortcutHandler shortcut_hijacked; - ShortcutCommand command_line = shortcut_hijacked.CreateWithArguments( - base::ASCIIToUTF16("chrome1.lnk"), - base::ASCIIToUTF16("--profile-directory=Default foo.com")); - shortcut_hijacked.CheckShortcutHasArguments( - base::ASCIIToUTF16("--profile-directory=Default foo.com")); - ShortcutHandler shortcut_ok; - shortcut_ok.CreateWithArguments( - base::ASCIIToUTF16("chrome2.lnk"), - base::ASCIIToUTF16("--profile-directory=Default1")); - - ResettableSettingsSnapshot nonorganic_snap(profile(), true); - // Let it enumerate shortcuts on the FILE thread. - base::MessageLoop::current()->RunUntilIdle(); - int diff_fields = ResettableSettingsSnapshot::ALL_FIELDS; - if (!ShortcutHandler::IsSupported()) - diff_fields &= ~ResettableSettingsSnapshot::SHORTCUTS; - EXPECT_EQ(diff_fields, + + ResettableSettingsSnapshot nonorganic_snap(profile()); + EXPECT_EQ(ResettableSettingsSnapshot::ALL_FIELDS, empty_snap.FindDifferentFields(nonorganic_snap)); empty_snap.Subtract(nonorganic_snap); EXPECT_TRUE(empty_snap.startup_urls().empty()); @@ -910,19 +753,16 @@ TEST_F(ProfileResetterTest, CheckSnapshots) { EXPECT_NE(std::string::npos, empty_snap.dse_url().find("{google:baseURL}")); EXPECT_EQ(ResettableSettingsSnapshot::ExtensionList(), empty_snap.enabled_extensions()); - EXPECT_EQ(std::vector<ShortcutCommand>(), empty_snap.shortcuts()); // Reset to organic defaults. ResetAndWait(ProfileResetter::DEFAULT_SEARCH_ENGINE | ProfileResetter::HOMEPAGE | ProfileResetter::STARTUP_PAGES | - ProfileResetter::EXTENSIONS | - ProfileResetter::SHORTCUTS); + ProfileResetter::EXTENSIONS); - ResettableSettingsSnapshot organic_snap(profile(), true); - // Let it enumerate shortcuts on the FILE thread. - base::MessageLoop::current()->RunUntilIdle(); - EXPECT_EQ(diff_fields, nonorganic_snap.FindDifferentFields(organic_snap)); + ResettableSettingsSnapshot organic_snap(profile()); + EXPECT_EQ(ResettableSettingsSnapshot::ALL_FIELDS, + nonorganic_snap.FindDifferentFields(organic_snap)); nonorganic_snap.Subtract(organic_snap); const GURL urls[] = {GURL("http://foo.de"), GURL("http://goo.gl")}; EXPECT_EQ(std::vector<GURL>(urls, urls + arraysize(urls)), @@ -934,15 +774,9 @@ TEST_F(ProfileResetterTest, CheckSnapshots) { EXPECT_EQ(ResettableSettingsSnapshot::ExtensionList( 1, std::make_pair(ext_id, "example")), nonorganic_snap.enabled_extensions()); - if (ShortcutHandler::IsSupported()) { - std::vector<ShortcutCommand> shortcuts = nonorganic_snap.shortcuts(); - ASSERT_EQ(1u, shortcuts.size()); - EXPECT_EQ(command_line.first.value(), shortcuts[0].first.value()); - EXPECT_EQ(command_line.second, shortcuts[0].second); - } } -TEST_F(ProfileResetterTest, FeedbackSerializationTest) { +TEST_F(ProfileResetterTest, FeedbackSerializtionTest) { // Reset to non organic defaults. ResetAndWait(ProfileResetter::DEFAULT_SEARCH_ENGINE | ProfileResetter::HOMEPAGE | @@ -950,7 +784,7 @@ TEST_F(ProfileResetterTest, FeedbackSerializationTest) { kDistributionConfig); scoped_refptr<Extension> ext = CreateExtension( - base::ASCIIToUTF16("example"), + ASCIIToUTF16("example"), base::FilePath(FILE_PATH_LITERAL("//nonexistent")), Manifest::INVALID_LOCATION, extensions::Manifest::TYPE_EXTENSION, @@ -958,16 +792,9 @@ TEST_F(ProfileResetterTest, FeedbackSerializationTest) { ASSERT_TRUE(ext); service_->AddExtension(ext.get()); - ShortcutHandler shortcut; - ShortcutCommand command_line = shortcut.CreateWithArguments( - base::ASCIIToUTF16("chrome.lnk"), - base::ASCIIToUTF16("--profile-directory=Default foo.com")); + const ResettableSettingsSnapshot nonorganic_snap(profile()); - const ResettableSettingsSnapshot nonorganic_snap(profile(), true); - // Let it enumerate shortcuts on the FILE thread. - base::MessageLoop::current()->RunUntilIdle(); - - COMPILE_ASSERT(ResettableSettingsSnapshot::ALL_FIELDS == 31, + COMPILE_ASSERT(ResettableSettingsSnapshot::ALL_FIELDS == 15, expand_this_test); for (int field_mask = 0; field_mask <= ResettableSettingsSnapshot::ALL_FIELDS; ++field_mask) { @@ -986,8 +813,7 @@ TEST_F(ProfileResetterTest, FeedbackSerializationTest) { std::string homepage; bool homepage_is_ntp = true; std::string default_search_engine; - base::ListValue* extensions = NULL; - base::ListValue* shortcuts = NULL; + base::ListValue* extensions; EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::STARTUP_MODE), dict->GetList("startup_urls", &startup_urls)); @@ -1001,22 +827,9 @@ TEST_F(ProfileResetterTest, FeedbackSerializationTest) { dict->GetString("default_search_engine", &default_search_engine)); EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::EXTENSIONS), dict->GetList("enabled_extensions", &extensions)); - EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::SHORTCUTS), - dict->GetList("shortcuts", &shortcuts)); } } -struct FeedbackCapture { - void SetList(scoped_ptr<base::ListValue> list) { - list_ = list.Pass(); - OnUpdatedList(); - } - - MOCK_METHOD0(OnUpdatedList, void(void)); - - scoped_ptr<base::ListValue> list_; -}; - // Make sure GetReadableFeedback handles non-ascii letters. TEST_F(ProfileResetterTest, GetReadableFeedback) { scoped_refptr<Extension> ext = CreateExtension( @@ -1040,25 +853,10 @@ TEST_F(ProfileResetterTest, GetReadableFeedback) { startup_pref.urls.push_back(GURL(base::WideToUTF8(url))); SessionStartupPref::SetStartupPref(prefs, startup_pref); - ShortcutHandler shortcut; - ShortcutCommand command_line = shortcut.CreateWithArguments( - base::ASCIIToUTF16("chrome.lnk"), - base::ASCIIToUTF16("--profile-directory=Default foo.com")); - - FeedbackCapture capture; - EXPECT_CALL(capture, OnUpdatedList()); - ResettableSettingsSnapshot::GetReadableFeedback( - profile(), - base::Bind(&FeedbackCapture::SetList, base::Unretained(&capture))); - // Let it enumerate shortcuts on the FILE thread. - base::MessageLoop::current()->RunUntilIdle(); - ::testing::Mock::VerifyAndClearExpectations(&capture); // The homepage and the startup page are in punycode. They are unreadable. // Trying to find the extension name. - scoped_ptr<base::ListValue> list = capture.list_.Pass(); + scoped_ptr<base::ListValue> list(GetReadableFeedback(profile())); ASSERT_TRUE(list); - bool checked_extensions = false; - bool checked_shortcuts = false; for (size_t i = 0; i < list->GetSize(); ++i) { base::DictionaryValue* dict = NULL; ASSERT_TRUE(list->GetDictionary(i, &dict)); @@ -1068,17 +866,8 @@ TEST_F(ProfileResetterTest, GetReadableFeedback) { base::string16 extensions; EXPECT_TRUE(dict->GetString("value", &extensions)); EXPECT_EQ(base::WideToUTF16(L"Tiƫsto"), extensions); - checked_extensions = true; - } else if (value == "Shortcut targets") { - base::string16 targets; - EXPECT_TRUE(dict->GetString("value", &targets)); - EXPECT_NE(base::string16::npos, - targets.find(base::ASCIIToUTF16("foo.com"))) << targets; - checked_shortcuts = true; } } - EXPECT_TRUE(checked_extensions); - EXPECT_EQ(ShortcutHandler::IsSupported(), checked_shortcuts); } } // namespace |