// Copyright 2013 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. #ifndef CHROME_BROWSER_EXTENSIONS_API_SESSIONS_SESSIONS_API_H__ #define CHROME_BROWSER_EXTENSIONS_API_SESSIONS_SESSIONS_API_H__ #include #include "chrome/browser/extensions/api/profile_keyed_api_factory.h" #include "chrome/browser/extensions/chrome_extension_function.h" #include "chrome/browser/sessions/tab_restore_service.h" #include "chrome/browser/sessions/tab_restore_service_observer.h" #include "chrome/common/extensions/api/sessions.h" #include "chrome/common/extensions/api/tabs.h" #include "chrome/common/extensions/api/windows.h" class Profile; namespace browser_sync { struct SyncedSession; } namespace extensions { class SessionId; class SessionsGetRecentlyClosedFunction : public ChromeSyncExtensionFunction { protected: virtual ~SessionsGetRecentlyClosedFunction() {} virtual bool RunImpl() OVERRIDE; DECLARE_EXTENSION_FUNCTION("sessions.getRecentlyClosed", SESSIONS_GETRECENTLYCLOSED) private: scoped_ptr CreateTabModel(const TabRestoreService::Tab& tab, int session_id, int selected_index); scoped_ptr CreateWindowModel( const TabRestoreService::Window& window, int session_id); scoped_ptr CreateSessionModel( const TabRestoreService::Entry* entry); }; class SessionsGetDevicesFunction : public ChromeSyncExtensionFunction { protected: virtual ~SessionsGetDevicesFunction() {} virtual bool RunImpl() OVERRIDE; DECLARE_EXTENSION_FUNCTION("sessions.getDevices", SESSIONS_GETDEVICES) private: scoped_ptr CreateTabModel(const std::string& session_tag, const SessionTab& tab, int tab_index, int selected_index); scoped_ptr CreateWindowModel( const SessionWindow& window, const std::string& session_tag); scoped_ptr CreateSessionModel( const SessionWindow& window, const std::string& session_tag); scoped_ptr CreateDeviceModel( const browser_sync::SyncedSession* session); }; class SessionsRestoreFunction : public ChromeSyncExtensionFunction { protected: virtual ~SessionsRestoreFunction() {} virtual bool RunImpl() OVERRIDE; DECLARE_EXTENSION_FUNCTION("sessions.restore", SESSIONS_RESTORE) private: void SetInvalidIdError(const std::string& invalid_id); void SetResultRestoredTab(const content::WebContents* contents); bool SetResultRestoredWindow(int window_id); bool RestoreMostRecentlyClosed(Browser* browser); bool RestoreLocalSession(const SessionId& session_id, Browser* browser); bool RestoreForeignSession(const SessionId& session_id, Browser* browser); }; class SessionsAPI : public ProfileKeyedAPI { public: explicit SessionsAPI(Profile* profile); virtual ~SessionsAPI(); // ProfileKeyedAPI implementation. static ProfileKeyedAPIFactory* GetFactoryInstance(); private: friend class ProfileKeyedAPIFactory; // ProfileKeyedAPI implementation. static const char* service_name() { return "SessionsAPI"; } static const bool kServiceIsNULLWhileTesting = true; }; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_SESSIONS_SESSIONS_API_H__