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/sync/glue/synced_session.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_sync { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncedSession::SyncedSession() : session_tag("invalid"), 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_type(TYPE_UNSET) { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncedSession::~SyncedSession() { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STLDeleteContainerPairSecondPointers(windows.begin(), windows.end()); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: if you modify this, make sure you modify 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SessionModelAssociator::ShouldSyncTab to ensure the logic matches. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ShouldSyncSessionTab(const SessionTab& tab) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tab.navigations.empty()) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool found_valid_url = false; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < tab.navigations.size(); ++i) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tab.navigations.at(i).virtual_url().is_valid() && 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !tab.navigations.at(i).virtual_url().SchemeIs("chrome") && 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !tab.navigations.at(i).virtual_url().SchemeIsFile()) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) found_valid_url = true; 323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch break; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return found_valid_url; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SessionWindowHasNoTabsToSync(const SessionWindow& window) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_populated = 0; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<SessionTab*>::const_iterator i = window.tabs.begin(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != window.tabs.end(); ++i) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionTab* tab = *i; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ShouldSyncSessionTab(*tab)) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_populated++; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (num_populated == 0); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace browser_sync 50