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