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