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) 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/sync_data.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/app_specifics.pb.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync.pb.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AppSyncData::AppSyncData() {} 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AppSyncData::AppSyncData(const syncer::SyncData& sync_data) { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopulateFromSyncData(sync_data); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AppSyncData::AppSyncData(const syncer::SyncChange& sync_change) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopulateFromSyncData(sync_change.sync_data()); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_sync_data_.set_uninstalled( 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_change.change_type() == syncer::SyncChange::ACTION_DELETE); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AppSyncData::AppSyncData(const Extension& extension, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enabled, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito_enabled, 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool remote_install, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::StringOrdinal& app_launch_ordinal, 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const syncer::StringOrdinal& page_ordinal, 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::LaunchType launch_type) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : extension_sync_data_(extension, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) enabled, 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) incognito_enabled, 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) remote_install), 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_launch_ordinal_(app_launch_ordinal), 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) page_ordinal_(page_ordinal), 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) launch_type_(launch_type) { 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (extension.from_bookmark()) { 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bookmark_app_description_ = extension.description(); 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bookmark_app_url_ = AppLaunchInfo::GetLaunchWebURL(&extension).spec(); 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AppSyncData::~AppSyncData() {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::SyncData AppSyncData::GetSyncData() const { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::EntitySpecifics specifics; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopulateAppSpecifics(specifics.mutable_app()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return syncer::SyncData::CreateLocalData(extension_sync_data_.id(), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_sync_data_.name(), 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) specifics); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::SyncChange AppSyncData::GetSyncChange( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::SyncChange::SyncChangeType change_type) const { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return syncer::SyncChange(FROM_HERE, change_type, GetSyncData()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppSyncData::PopulateAppSpecifics(sync_pb::AppSpecifics* specifics) const { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(specifics); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Only sync the ordinal values and launch type if they are valid. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (app_launch_ordinal_.IsValid()) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) specifics->set_app_launch_ordinal(app_launch_ordinal_.ToInternalValue()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_ordinal_.IsValid()) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) specifics->set_page_ordinal(page_ordinal_.ToInternalValue()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sync_pb::AppSpecifics::LaunchType sync_launch_type = 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<sync_pb::AppSpecifics::LaunchType>(launch_type_); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The corresponding validation of this value during processing of an 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // AppSyncData is in ExtensionSyncService::ProcessAppSyncData. 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (launch_type_ >= LAUNCH_TYPE_FIRST && launch_type_ < NUM_LAUNCH_TYPES && 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sync_pb::AppSpecifics_LaunchType_IsValid(sync_launch_type)) { 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) specifics->set_launch_type(sync_launch_type); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!bookmark_app_url_.empty()) 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu specifics->set_bookmark_app_url(bookmark_app_url_); 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!bookmark_app_description_.empty()) 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu specifics->set_bookmark_app_description(bookmark_app_description_); 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_sync_data_.PopulateExtensionSpecifics( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) specifics->mutable_extension()); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppSyncData::PopulateFromAppSpecifics( 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::AppSpecifics& specifics) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_sync_data_.PopulateFromExtensionSpecifics(specifics.extension()); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_launch_ordinal_ = syncer::StringOrdinal(specifics.app_launch_ordinal()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_ordinal_ = syncer::StringOrdinal(specifics.page_ordinal()); 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) launch_type_ = specifics.has_launch_type() 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ? static_cast<extensions::LaunchType>(specifics.launch_type()) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : LAUNCH_TYPE_INVALID; 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bookmark_app_url_ = specifics.bookmark_app_url(); 1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bookmark_app_description_ = specifics.bookmark_app_description(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AppSyncData::PopulateFromSyncData(const syncer::SyncData& sync_data) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopulateFromAppSpecifics(sync_data.GetSpecifics().app()); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 111