15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/app_sync_data.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/string_ordinal.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/app_specifics.pb.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync.pb.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kValidId[] = "abcdefghijklmnopabcdefghijklmnop"; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kName[] = "MyExtension"; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kValidVersion[] = "0.0.0.0"; 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kValidUpdateUrl[] = "http://clients2.google.com/service/update2/crx"; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppSyncDataTest : public testing::Test { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppSyncDataTest() {} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~AppSyncDataTest() {} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetRequiredExtensionValues( 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::ExtensionSpecifics* extension_specifics) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_specifics->set_id(kValidId); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_specifics->set_update_url(kValidUpdateUrl); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_specifics->set_version(kValidVersion); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_specifics->set_enabled(false); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_specifics->set_incognito_enabled(true); 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) extension_specifics->set_remote_install(false); 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_specifics->set_installed_by_custodian(false); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_specifics->set_name(kName); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppSyncDataTest, SyncDataToExtensionSyncDataForApp) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::EntitySpecifics entity; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::AppSpecifics* app_specifics = entity.mutable_app(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_specifics->set_app_launch_ordinal( 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_specifics->set_page_ordinal( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRequiredExtensionValues(app_specifics->mutable_extension()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncData sync_data = 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppSyncData app_sync_data(sync_data); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(app_specifics->app_launch_ordinal(), 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_sync_data.app_launch_ordinal().ToInternalValue()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(app_specifics->page_ordinal(), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_sync_data.page_ordinal().ToInternalValue()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppSyncDataTest, ExtensionSyncDataToSyncDataForApp) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::EntitySpecifics entity; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::AppSpecifics* input_specifics = entity.mutable_app(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_specifics->set_app_launch_ordinal( 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_specifics->set_page_ordinal( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::StringOrdinal::CreateInitialOrdinal().ToInternalValue()); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRequiredExtensionValues(input_specifics->mutable_extension()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncData sync_data = 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppSyncData app_sync_data(sync_data); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncData output_sync_data = app_sync_data.GetSyncData(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(sync_data.GetSpecifics().has_app()); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::AppSpecifics& output_specifics = 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output_sync_data.GetSpecifics().app(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_specifics->SerializeAsString(), 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output_specifics.SerializeAsString()); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ensures that invalid StringOrdinals don't break ExtensionSyncData. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppSyncDataTest, ExtensionSyncDataInvalidOrdinal) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::EntitySpecifics entity; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::AppSpecifics* app_specifics = entity.mutable_app(); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the ordinals as invalid. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_specifics->set_app_launch_ordinal(""); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_specifics->set_page_ordinal(""); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRequiredExtensionValues(app_specifics->mutable_extension()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncData sync_data = 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be no issue loading the sync data. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppSyncData app_sync_data(sync_data); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_sync_data.GetSyncData(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 100