sessions_util.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/sync/sessions/sessions_util.h" 6 7#include "chrome/browser/sync/glue/synced_tab_delegate.h" 8#include "chrome/browser/sync/glue/synced_window_delegate.h" 9#include "chrome/common/url_constants.h" 10#include "content/public/browser/navigation_entry.h" 11#include "url/gurl.h" 12 13namespace browser_sync { 14 15namespace sessions_util { 16 17bool ShouldSyncTab(const SyncedTabDelegate& tab) { 18 if (SyncedWindowDelegate::FindSyncedWindowDelegateWithId( 19 tab.GetWindowId()) == NULL) { 20 return false; 21 } 22 23 // Does the tab have a valid NavigationEntry? 24 if (tab.ProfileIsManaged() && tab.GetBlockedNavigations()->size() > 0) 25 return true; 26 27 int entry_count = tab.GetEntryCount(); 28 if (entry_count == 0) 29 return false; // This deliberately ignores a new pending entry. 30 31 int pending_index = tab.GetPendingEntryIndex(); 32 bool found_valid_url = false; 33 for (int i = 0; i < entry_count; ++i) { 34 const content::NavigationEntry* entry = (i == pending_index) ? 35 tab.GetPendingEntry() : tab.GetEntryAtIndex(i); 36 if (!entry) 37 return false; 38 const GURL& virtual_url = entry->GetVirtualURL(); 39 if (virtual_url.is_valid() && 40 !virtual_url.SchemeIs(content::kChromeUIScheme) && 41 !virtual_url.SchemeIs(chrome::kChromeNativeScheme) && 42 !virtual_url.SchemeIsFile()) { 43 found_valid_url = true; 44 } 45 } 46 return found_valid_url; 47} 48 49bool ShouldSyncWindow(const SyncedWindowDelegate* window) { 50 if (window->IsApp()) 51 return false; 52 return window->IsTypeTabbed() || window->IsTypePopup(); 53} 54 55} // namespace sessions_util 56 57} // namespace browser_sync 58