blob: 90afc1e46d6facebf607d734f0139333d6c851f7 [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/extension_sync_data.h"
#include "base/memory/scoped_ptr.h"
#include "base/version.h"
#include "chrome/browser/sync/protocol/app_specifics.pb.h"
#include "chrome/browser/sync/protocol/extension_specifics.pb.h"
#include "googleurl/src/gurl.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
#if defined(OS_WIN)
const FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("c:\\foo");
#elif defined(OS_POSIX)
const FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("/foo");
#endif
const char kValidId[] = "abcdefghijklmnopabcdefghijklmnop";
const char kValidVersion[] = "0.0.0.0";
const char kVersion1[] = "1.0.0.1";
const char kVersion2[] = "1.0.1.0";
const char kVersion3[] = "1.1.0.0";
const char kValidUpdateUrl1[] =
"http://clients2.google.com/service/update2/crx";
const char kValidUpdateUrl2[] =
"https://clients2.google.com/service/update2/crx";
const char kName[] = "MyExtension";
const char kName2[] = "MyExtension2";
const char kOAuthClientId[] = "1234abcd";
class ExtensionSyncDataTest : public testing::Test {
};
TEST_F(ExtensionSyncDataTest, SyncDataToExtensionSyncDataForExtension) {
sync_pb::EntitySpecifics entity;
sync_pb::ExtensionSpecifics* extension_specifics =
entity.MutableExtension(sync_pb::extension);
extension_specifics->set_id(kValidId);
extension_specifics->set_update_url(kValidUpdateUrl2);
extension_specifics->set_enabled(false);
extension_specifics->set_incognito_enabled(true);
extension_specifics->set_version(kVersion1);
extension_specifics->set_name(kName);
SyncData sync_data =
SyncData::CreateLocalData("sync_tag", "non_unique_title", entity);
ExtensionSyncData extension_sync_data(sync_data);
EXPECT_EQ(extension_specifics->id(), extension_sync_data.id());
EXPECT_EQ(extension_specifics->version(),
extension_sync_data.version().GetString());
EXPECT_EQ(extension_specifics->update_url(),
extension_sync_data.update_url().spec());
EXPECT_EQ(extension_specifics->enabled(), extension_sync_data.enabled());
EXPECT_EQ(extension_specifics->incognito_enabled(),
extension_sync_data.incognito_enabled());
EXPECT_EQ(extension_specifics->name(), extension_sync_data.name());
EXPECT_FALSE(extension_sync_data.uninstalled());
}
TEST_F(ExtensionSyncDataTest, ExtensionSyncDataToSyncDataForExtension) {
sync_pb::EntitySpecifics entity;
sync_pb::ExtensionSpecifics* input_extension =
entity.MutableExtension(sync_pb::extension);
input_extension->set_id(kValidId);
input_extension->set_update_url(kValidUpdateUrl2);
input_extension->set_enabled(true);
input_extension->set_incognito_enabled(false);
input_extension->set_version(kVersion1);
input_extension->set_name(kName);
SyncData sync_data =
SyncData::CreateLocalData("sync_tag", "non_unique_title", entity);
ExtensionSyncData extension_sync_data(sync_data);
SyncData output_sync_data = extension_sync_data.GetSyncData();
const sync_pb::ExtensionSpecifics& output_specifics =
output_sync_data.GetSpecifics().GetExtension(sync_pb::extension);
EXPECT_EQ(extension_sync_data.id(), output_specifics.id());
EXPECT_EQ(extension_sync_data.update_url().spec(),
output_specifics.update_url());
EXPECT_EQ(extension_sync_data.enabled(), output_specifics.enabled());
EXPECT_EQ(extension_sync_data.incognito_enabled(),
output_specifics.incognito_enabled());
EXPECT_EQ(extension_sync_data.version().GetString(),
output_specifics.version());
EXPECT_EQ(extension_sync_data.name(), output_specifics.name());
}
TEST_F(ExtensionSyncDataTest, SyncDataToExtensionSyncDataForApp) {
sync_pb::EntitySpecifics entity;
sync_pb::AppSpecifics* app_specifics = entity.MutableExtension(sync_pb::app);
app_specifics->set_app_launch_ordinal(
StringOrdinal::CreateInitialOrdinal().ToString());
app_specifics->set_page_ordinal(
StringOrdinal::CreateInitialOrdinal().ToString());
sync_pb::ExtensionSpecifics* extension_specifics =
app_specifics->mutable_extension();
extension_specifics->set_id(kValidId);
extension_specifics->set_update_url(kValidUpdateUrl2);
extension_specifics->set_enabled(false);
extension_specifics->set_incognito_enabled(true);
extension_specifics->set_version(kVersion1);
extension_specifics->set_name(kName);
sync_pb::AppNotificationSettings* notif_settings =
app_specifics->mutable_notification_settings();
notif_settings->set_oauth_client_id(kOAuthClientId);
notif_settings->set_disabled(true);
SyncData sync_data =
SyncData::CreateLocalData("sync_tag", "non_unique_title", entity);
ExtensionSyncData extension_sync_data(sync_data);
EXPECT_EQ(app_specifics->app_launch_ordinal(),
extension_sync_data.app_launch_ordinal().ToString());
EXPECT_EQ(app_specifics->page_ordinal(),
extension_sync_data.page_ordinal().ToString());
EXPECT_EQ(extension_specifics->id(), extension_sync_data.id());
EXPECT_EQ(extension_specifics->version(),
extension_sync_data.version().GetString());
EXPECT_EQ(extension_specifics->update_url(),
extension_sync_data.update_url().spec());
EXPECT_EQ(extension_specifics->enabled(), extension_sync_data.enabled());
EXPECT_EQ(extension_specifics->incognito_enabled(),
extension_sync_data.incognito_enabled());
EXPECT_EQ(extension_specifics->name(), extension_sync_data.name());
EXPECT_FALSE(extension_sync_data.uninstalled());
EXPECT_EQ(notif_settings->oauth_client_id(),
extension_sync_data.notifications_client_id());
EXPECT_EQ(notif_settings->disabled(),
extension_sync_data.notifications_disabled());
}
TEST_F(ExtensionSyncDataTest, ExtensionSyncDataToSyncDataForApp) {
sync_pb::EntitySpecifics entity;
sync_pb::AppSpecifics* input_specifics = entity.MutableExtension(
sync_pb::app);
input_specifics->set_app_launch_ordinal(
StringOrdinal::CreateInitialOrdinal().ToString());
input_specifics->set_page_ordinal(
StringOrdinal::CreateInitialOrdinal().ToString());
sync_pb::ExtensionSpecifics* input_extension =
input_specifics->mutable_extension();
input_extension->set_id(kValidId);
input_extension->set_update_url(kValidUpdateUrl2);
input_extension->set_enabled(true);
input_extension->set_incognito_enabled(false);
input_extension->set_version(kVersion1);
input_extension->set_name(kName);
sync_pb::AppNotificationSettings* notif_settings =
input_specifics->mutable_notification_settings();
notif_settings->set_oauth_client_id(kOAuthClientId);
notif_settings->set_disabled(true);
SyncData sync_data =
SyncData::CreateLocalData("sync_tag", "non_unique_title", entity);
ExtensionSyncData extension_sync_data(sync_data);
SyncData output_sync_data = extension_sync_data.GetSyncData();
EXPECT_TRUE(sync_data.GetSpecifics().HasExtension(sync_pb::app));
const sync_pb::AppSpecifics& output_specifics =
output_sync_data.GetSpecifics().GetExtension(sync_pb::app);
EXPECT_EQ(input_specifics->SerializeAsString(),
output_specifics.SerializeAsString());
}
// Ensures that invalid StringOrdinals don't break ExtensionSyncData.
TEST_F(ExtensionSyncDataTest, ExtensionSyncDataInvalidOrdinal) {
sync_pb::EntitySpecifics entity;
sync_pb::AppSpecifics* app_specifics = entity.MutableExtension(sync_pb::app);
// Set the ordinals as invalid.
app_specifics->set_app_launch_ordinal("");
app_specifics->set_page_ordinal("");
sync_pb::ExtensionSpecifics* extension_specifics =
app_specifics->mutable_extension();
extension_specifics->set_id(kValidId);
extension_specifics->set_update_url(kValidUpdateUrl2);
extension_specifics->set_enabled(false);
extension_specifics->set_incognito_enabled(true);
extension_specifics->set_version(kVersion1);
extension_specifics->set_name(kName);
sync_pb::AppNotificationSettings* notif_settings =
app_specifics->mutable_notification_settings();
notif_settings->set_oauth_client_id(kOAuthClientId);
notif_settings->set_disabled(true);
SyncData sync_data =
SyncData::CreateLocalData("sync_tag", "non_unique_title", entity);
ExtensionSyncData extension_sync_data(sync_data);
// Try loading the synced data back out, there should be no problems.
extension_sync_data.PopulateAppSpecifics(app_specifics);
}
} // namespace