| Index: chrome/browser/extensions/api/session_restore/session_restore_api.cc
|
| diff --git a/chrome/browser/extensions/api/session_restore/session_restore_api.cc b/chrome/browser/extensions/api/session_restore/session_restore_api.cc
|
| deleted file mode 100644
|
| index ed0042cb6efc7676a160159f8c400df72ba3630c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/session_restore/session_restore_api.cc
|
| +++ /dev/null
|
| @@ -1,239 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/extensions/api/session_restore/session_restore_api.h"
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/i18n/rtl.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/extensions/extension_function_registry.h"
|
| -#include "chrome/browser/extensions/extension_tab_util.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/sessions/session_restore.h"
|
| -#include "chrome/browser/sessions/tab_restore_service_delegate.h"
|
| -#include "chrome/browser/sessions/tab_restore_service_factory.h"
|
| -#include "chrome/browser/sync/glue/session_model_associator.h"
|
| -#include "chrome/browser/sync/glue/synced_session.h"
|
| -#include "chrome/browser/sync/profile_sync_service.h"
|
| -#include "chrome/browser/sync/profile_sync_service_factory.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/browser/ui/browser_finder.h"
|
| -#include "chrome/browser/ui/host_desktop.h"
|
| -#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "ui/base/layout.h"
|
| -
|
| -
|
| -namespace {
|
| -
|
| -const unsigned int kMaxRecentlyClosedSessionResults = 25;
|
| -const char kRecentlyClosedListEmpty[] =
|
| - "There are no recently closed sessions.";
|
| -const char kInvalidSessionId[] = "Invalid session id.";
|
| -const char kNoBrowserToRestoreSession[] =
|
| - "There are no browser windows to restore the session.";
|
| -
|
| -} // namespace
|
| -
|
| -namespace extensions {
|
| -
|
| -namespace GetRecentlyClosed = api::session_restore::GetRecentlyClosed;
|
| -namespace Restore = api::session_restore::Restore;
|
| -namespace tabs = api::tabs;
|
| -namespace windows = api::windows;
|
| -namespace session_restore = api::session_restore;
|
| -
|
| -scoped_ptr<tabs::Tab> SessionRestoreGetRecentlyClosedFunction::CreateTabModel(
|
| - const TabRestoreService::Tab& tab, int selected_index) {
|
| - scoped_ptr<tabs::Tab> tab_struct(new tabs::Tab);
|
| - const sessions::SerializedNavigationEntry& current_navigation =
|
| - tab.navigations[tab.current_navigation_index];
|
| - GURL gurl = current_navigation.virtual_url();
|
| - std::string title = UTF16ToUTF8(current_navigation.title());
|
| -
|
| - tab_struct->url.reset(new std::string(gurl.spec()));
|
| - tab_struct->title.reset(new std::string(title.empty() ? gurl.spec() : title));
|
| - tab_struct->index = tab.tabstrip_index;
|
| - tab_struct->pinned = tab.pinned;
|
| - tab_struct->id = tab.id;
|
| - tab_struct->window_id = tab.browser_id;
|
| - tab_struct->index = tab.tabstrip_index;
|
| - tab_struct->pinned = tab.pinned;
|
| - tab_struct->selected = tab.tabstrip_index == selected_index;
|
| - tab_struct->active = false;
|
| - tab_struct->highlighted = false;
|
| - tab_struct->incognito = false;
|
| - ExtensionTabUtil::ScrubTabForExtension(GetExtension(),
|
| - tab_struct.get());
|
| - return tab_struct.Pass();
|
| -}
|
| -
|
| -scoped_ptr<windows::Window>
|
| - SessionRestoreGetRecentlyClosedFunction::CreateWindowModel(
|
| - const TabRestoreService::Window& window) {
|
| - scoped_ptr<windows::Window> window_struct(new windows::Window);
|
| - DCHECK(!window.tabs.empty());
|
| -
|
| - scoped_ptr<std::vector<linked_ptr<tabs::Tab> > > tabs(
|
| - new std::vector<linked_ptr<tabs::Tab> >);
|
| - for (size_t i = 0; i < window.tabs.size(); ++i) {
|
| - tabs->push_back(make_linked_ptr(CreateTabModel(window.tabs[i],
|
| - window.selected_tab_index).release()));
|
| - }
|
| - window_struct->tabs.reset(tabs.release());
|
| - window_struct->incognito = false;
|
| - window_struct->always_on_top = false;
|
| - window_struct->focused = false;
|
| - window_struct->type = windows::Window::TYPE_NORMAL;
|
| - window_struct->state = windows::Window::STATE_NORMAL;
|
| - return window_struct.Pass();
|
| -}
|
| -
|
| -scoped_ptr<session_restore::ClosedEntry>
|
| - SessionRestoreGetRecentlyClosedFunction::CreateEntryModel(
|
| - const TabRestoreService::Entry* entry) {
|
| - scoped_ptr<session_restore::ClosedEntry> entry_struct(
|
| - new session_restore::ClosedEntry);
|
| - switch (entry->type) {
|
| - case TabRestoreService::TAB:
|
| - entry_struct->tab.reset(CreateTabModel(
|
| - *static_cast<const TabRestoreService::Tab*>(entry), -1).release());
|
| - break;
|
| - case TabRestoreService::WINDOW:
|
| - entry_struct->window.reset(CreateWindowModel(
|
| - *static_cast<const TabRestoreService::Window*>(entry)).release());
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| - entry_struct->timestamp = entry->timestamp.ToTimeT();
|
| - entry_struct->id = entry->id;
|
| - return entry_struct.Pass();
|
| -}
|
| -
|
| -bool SessionRestoreGetRecentlyClosedFunction::RunImpl() {
|
| - scoped_ptr<GetRecentlyClosed::Params> params(
|
| - GetRecentlyClosed::Params::Create(*args_));
|
| - EXTENSION_FUNCTION_VALIDATE(params.get());
|
| - unsigned int max_results = kMaxRecentlyClosedSessionResults;
|
| - if (params->options && params->options->max_results)
|
| - max_results = *params->options->max_results;
|
| - EXTENSION_FUNCTION_VALIDATE(max_results >= 0 &&
|
| - max_results <= kMaxRecentlyClosedSessionResults);
|
| -
|
| - std::vector<linked_ptr<session_restore::ClosedEntry> > result;
|
| - TabRestoreService* tab_restore_service =
|
| - TabRestoreServiceFactory::GetForProfile(profile());
|
| - DCHECK(tab_restore_service);
|
| -
|
| - // List of entries. They are ordered from most to least recent.
|
| - // We prune the list to contain max 25 entries at any time and removes
|
| - // uninteresting entries.
|
| - TabRestoreService::Entries entries = tab_restore_service->entries();
|
| - for (TabRestoreService::Entries::const_iterator it = entries.begin();
|
| - it != entries.end() && result.size() < max_results; ++it) {
|
| - TabRestoreService::Entry* entry = *it;
|
| - if (!params->options || params->options->entry_type ==
|
| - GetRecentlyClosed::Params::Options::ENTRY_TYPE_NONE) {
|
| - // Include both tabs and windows if type is not defined.
|
| - result.push_back(make_linked_ptr(CreateEntryModel(entry).release()));
|
| - } else if (
|
| - (params->options->entry_type ==
|
| - GetRecentlyClosed::Params::Options::ENTRY_TYPE_TAB &&
|
| - entry->type == TabRestoreService::TAB) ||
|
| - (params->options->entry_type ==
|
| - GetRecentlyClosed::Params::Options::ENTRY_TYPE_WINDOW &&
|
| - entry->type == TabRestoreService::WINDOW)) {
|
| - result.push_back(make_linked_ptr(CreateEntryModel(entry).release()));
|
| - }
|
| - }
|
| -
|
| - results_ = GetRecentlyClosed::Results::Create(result);
|
| - return true;
|
| -}
|
| -
|
| -bool SessionRestoreRestoreFunction::RunImpl() {
|
| - scoped_ptr<Restore::Params> params(Restore::Params::Create(*args_));
|
| - EXTENSION_FUNCTION_VALIDATE(params.get());
|
| -
|
| - Browser* browser =
|
| - chrome::FindBrowserWithProfile(profile(),
|
| - chrome::HOST_DESKTOP_TYPE_NATIVE);
|
| - if (!browser) {
|
| - error_ = kNoBrowserToRestoreSession;
|
| - return false;
|
| - }
|
| -
|
| - TabRestoreService* tab_restore_service =
|
| - TabRestoreServiceFactory::GetForProfile(profile());
|
| - TabRestoreServiceDelegate* delegate =
|
| - TabRestoreServiceDelegate::FindDelegateForWebContents(
|
| - browser->tab_strip_model()->GetActiveWebContents());
|
| - DCHECK(delegate);
|
| - chrome::HostDesktopType host_desktop_type = browser->host_desktop_type();
|
| - TabRestoreService::Entries entries = tab_restore_service->entries();
|
| -
|
| - if (entries.empty()) {
|
| - error_ = kRecentlyClosedListEmpty;
|
| - return false;
|
| - }
|
| -
|
| - if (!params->id) {
|
| - tab_restore_service->RestoreMostRecentEntry(delegate, host_desktop_type);
|
| - return true;
|
| - }
|
| -
|
| - // Check if the recently closed list contains an entry with the provided id.
|
| - bool is_valid_id = false;
|
| - for (TabRestoreService::Entries::iterator it = entries.begin();
|
| - it != entries.end(); ++it) {
|
| - if ((*it)->id == *params->id) {
|
| - is_valid_id = true;
|
| - break;
|
| - }
|
| -
|
| - // For Window entries, see if the ID matches a tab. If so, report true for
|
| - // the window as the Entry.
|
| - if ((*it)->type == TabRestoreService::WINDOW) {
|
| - std::vector<TabRestoreService::Tab>& tabs =
|
| - static_cast<TabRestoreService::Window*>(*it)->tabs;
|
| - for (std::vector<TabRestoreService::Tab>::iterator tab_it = tabs.begin();
|
| - tab_it != tabs.end(); ++tab_it) {
|
| - if ((*tab_it).id == *params->id) {
|
| - is_valid_id = true;
|
| - break;
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (!is_valid_id) {
|
| - error_ = kInvalidSessionId;
|
| - return false;
|
| - }
|
| -
|
| - tab_restore_service->RestoreEntryById(delegate, *params->id,
|
| - host_desktop_type, UNKNOWN);
|
| - return true;
|
| -}
|
| -
|
| -SessionRestoreAPI::SessionRestoreAPI(Profile* profile) {
|
| -}
|
| -
|
| -SessionRestoreAPI::~SessionRestoreAPI() {
|
| -}
|
| -
|
| -static base::LazyInstance<ProfileKeyedAPIFactory<SessionRestoreAPI> >
|
| - g_factory = LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -// static
|
| -ProfileKeyedAPIFactory<SessionRestoreAPI>*
|
| - SessionRestoreAPI::GetFactoryInstance() {
|
| - return &g_factory.Get();
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|