1// Copyright (c) 2011 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#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_TABS_MODULE_H__ 6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_TABS_MODULE_H__ 7#pragma once 8 9#include <string> 10 11#include "chrome/browser/extensions/extension_function.h" 12#include "content/browser/tab_contents/tab_contents_observer.h" 13#include "content/common/notification_observer.h" 14#include "content/common/notification_registrar.h" 15 16class BackingStore; 17class Browser; 18class DictionaryValue; 19class ListValue; 20class SkBitmap; 21class TabContents; 22class TabContentsWrapper; 23class TabStripModel; 24 25namespace ExtensionTabUtil { 26int GetWindowId(const Browser* browser); 27int GetTabId(const TabContents* tab_contents); 28std::string GetTabStatusText(bool is_loading); 29int GetWindowIdOfTab(const TabContents* tab_contents); 30ListValue* CreateTabList(const Browser* browser); 31DictionaryValue* CreateTabValue(const TabContents* tab_contents); 32DictionaryValue* CreateTabValue(const TabContents* tab_contents, 33 TabStripModel* tab_strip, 34 int tab_index); 35DictionaryValue* CreateWindowValue(const Browser* browser, 36 bool populate_tabs); 37// Gets the |tab_strip_model| and |tab_index| for the given |tab_contents|. 38bool GetTabStripModel(const TabContents* tab_contents, 39 TabStripModel** tab_strip_model, 40 int* tab_index); 41bool GetDefaultTab(Browser* browser, TabContentsWrapper** contents, 42 int* tab_id); 43// Any out parameter (|browser|, |tab_strip|, |contents|, & |tab_index|) may 44// be NULL and will not be set within the function. 45bool GetTabById(int tab_id, Profile* profile, bool incognito_enabled, 46 Browser** browser, 47 TabStripModel** tab_strip, 48 TabContentsWrapper** contents, 49 int* tab_index); 50} 51 52// Windows 53class GetWindowFunction : public SyncExtensionFunction { 54 ~GetWindowFunction() {} 55 virtual bool RunImpl(); 56 DECLARE_EXTENSION_FUNCTION_NAME("windows.get") 57}; 58class GetCurrentWindowFunction : public SyncExtensionFunction { 59 ~GetCurrentWindowFunction() {} 60 virtual bool RunImpl(); 61 DECLARE_EXTENSION_FUNCTION_NAME("windows.getCurrent") 62}; 63class GetLastFocusedWindowFunction : public SyncExtensionFunction { 64 ~GetLastFocusedWindowFunction() {} 65 virtual bool RunImpl(); 66 DECLARE_EXTENSION_FUNCTION_NAME("windows.getLastFocused") 67}; 68class GetAllWindowsFunction : public SyncExtensionFunction { 69 ~GetAllWindowsFunction() {} 70 virtual bool RunImpl(); 71 DECLARE_EXTENSION_FUNCTION_NAME("windows.getAll") 72}; 73class CreateWindowFunction : public SyncExtensionFunction { 74 ~CreateWindowFunction() {} 75 virtual bool RunImpl(); 76 DECLARE_EXTENSION_FUNCTION_NAME("windows.create") 77}; 78class UpdateWindowFunction : public SyncExtensionFunction { 79 ~UpdateWindowFunction() {} 80 virtual bool RunImpl(); 81 DECLARE_EXTENSION_FUNCTION_NAME("windows.update") 82}; 83class RemoveWindowFunction : public SyncExtensionFunction { 84 ~RemoveWindowFunction() {} 85 virtual bool RunImpl(); 86 DECLARE_EXTENSION_FUNCTION_NAME("windows.remove") 87}; 88 89// Tabs 90class GetTabFunction : public SyncExtensionFunction { 91 ~GetTabFunction() {} 92 virtual bool RunImpl(); 93 DECLARE_EXTENSION_FUNCTION_NAME("tabs.get") 94}; 95class GetCurrentTabFunction : public SyncExtensionFunction { 96 ~GetCurrentTabFunction() {} 97 virtual bool RunImpl(); 98 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getCurrent") 99}; 100class GetSelectedTabFunction : public SyncExtensionFunction { 101 ~GetSelectedTabFunction() {} 102 virtual bool RunImpl(); 103 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getSelected") 104}; 105class GetAllTabsInWindowFunction : public SyncExtensionFunction { 106 ~GetAllTabsInWindowFunction() {} 107 virtual bool RunImpl(); 108 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getAllInWindow") 109}; 110class CreateTabFunction : public SyncExtensionFunction { 111 ~CreateTabFunction() {} 112 virtual bool RunImpl(); 113 DECLARE_EXTENSION_FUNCTION_NAME("tabs.create") 114}; 115class UpdateTabFunction : public AsyncExtensionFunction, 116 public TabContentsObserver { 117 public: 118 UpdateTabFunction(); 119 private: 120 ~UpdateTabFunction() {} 121 virtual bool RunImpl(); 122 virtual bool OnMessageReceived(const IPC::Message& message); 123 void OnExecuteCodeFinished(int request_id, bool success, 124 const std::string& error); 125 TabContentsObserver::Registrar registrar_; 126 DECLARE_EXTENSION_FUNCTION_NAME("tabs.update") 127}; 128class MoveTabFunction : public SyncExtensionFunction { 129 ~MoveTabFunction() {} 130 virtual bool RunImpl(); 131 DECLARE_EXTENSION_FUNCTION_NAME("tabs.move") 132}; 133class RemoveTabFunction : public SyncExtensionFunction { 134 ~RemoveTabFunction() {} 135 virtual bool RunImpl(); 136 DECLARE_EXTENSION_FUNCTION_NAME("tabs.remove") 137}; 138class DetectTabLanguageFunction : public AsyncExtensionFunction, 139 public NotificationObserver { 140 private: 141 ~DetectTabLanguageFunction() {} 142 virtual bool RunImpl(); 143 144 virtual void Observe(NotificationType type, 145 const NotificationSource& source, 146 const NotificationDetails& details); 147 void GotLanguage(const std::string& language); 148 NotificationRegistrar registrar_; 149 DECLARE_EXTENSION_FUNCTION_NAME("tabs.detectLanguage") 150}; 151class CaptureVisibleTabFunction : public AsyncExtensionFunction, 152 public NotificationObserver { 153 private: 154 enum ImageFormat { 155 FORMAT_JPEG, 156 FORMAT_PNG 157 }; 158 159 // The default quality setting used when encoding jpegs. 160 static const int kDefaultQuality; 161 162 ~CaptureVisibleTabFunction() {} 163 virtual bool RunImpl(); 164 virtual bool CaptureSnapshotFromBackingStore(BackingStore* backing_store); 165 virtual void Observe(NotificationType type, 166 const NotificationSource& source, 167 const NotificationDetails& details); 168 virtual void SendResultFromBitmap(const SkBitmap& screen_capture); 169 170 NotificationRegistrar registrar_; 171 172 // The format (JPEG vs PNG) of the resulting image. Set in RunImpl(). 173 ImageFormat image_format_; 174 175 // Quality setting to use when encoding jpegs. Set in RunImpl(). 176 int image_quality_; 177 178 DECLARE_EXTENSION_FUNCTION_NAME("tabs.captureVisibleTab") 179}; 180 181#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_TABS_MODULE_H__ 182