• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 class BackingStore;
17 class Browser;
18 class DictionaryValue;
19 class ListValue;
20 class SkBitmap;
21 class TabContents;
22 class TabContentsWrapper;
23 class TabStripModel;
24 
25 namespace ExtensionTabUtil {
26 int GetWindowId(const Browser* browser);
27 int GetTabId(const TabContents* tab_contents);
28 std::string GetTabStatusText(bool is_loading);
29 int GetWindowIdOfTab(const TabContents* tab_contents);
30 ListValue* CreateTabList(const Browser* browser);
31 DictionaryValue* CreateTabValue(const TabContents* tab_contents);
32 DictionaryValue* CreateTabValue(const TabContents* tab_contents,
33                                 TabStripModel* tab_strip,
34                                 int tab_index);
35 DictionaryValue* CreateWindowValue(const Browser* browser,
36                                    bool populate_tabs);
37 // Gets the |tab_strip_model| and |tab_index| for the given |tab_contents|.
38 bool GetTabStripModel(const TabContents* tab_contents,
39                       TabStripModel** tab_strip_model,
40                       int* tab_index);
41 bool 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.
45 bool 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
53 class GetWindowFunction : public SyncExtensionFunction {
~GetWindowFunction()54   ~GetWindowFunction() {}
55   virtual bool RunImpl();
56   DECLARE_EXTENSION_FUNCTION_NAME("windows.get")
57 };
58 class GetCurrentWindowFunction : public SyncExtensionFunction {
~GetCurrentWindowFunction()59   ~GetCurrentWindowFunction() {}
60   virtual bool RunImpl();
61   DECLARE_EXTENSION_FUNCTION_NAME("windows.getCurrent")
62 };
63 class GetLastFocusedWindowFunction : public SyncExtensionFunction {
~GetLastFocusedWindowFunction()64   ~GetLastFocusedWindowFunction() {}
65   virtual bool RunImpl();
66   DECLARE_EXTENSION_FUNCTION_NAME("windows.getLastFocused")
67 };
68 class GetAllWindowsFunction : public SyncExtensionFunction {
~GetAllWindowsFunction()69   ~GetAllWindowsFunction() {}
70   virtual bool RunImpl();
71   DECLARE_EXTENSION_FUNCTION_NAME("windows.getAll")
72 };
73 class CreateWindowFunction : public SyncExtensionFunction {
~CreateWindowFunction()74   ~CreateWindowFunction() {}
75   virtual bool RunImpl();
76   DECLARE_EXTENSION_FUNCTION_NAME("windows.create")
77 };
78 class UpdateWindowFunction : public SyncExtensionFunction {
~UpdateWindowFunction()79   ~UpdateWindowFunction() {}
80   virtual bool RunImpl();
81   DECLARE_EXTENSION_FUNCTION_NAME("windows.update")
82 };
83 class RemoveWindowFunction : public SyncExtensionFunction {
~RemoveWindowFunction()84   ~RemoveWindowFunction() {}
85   virtual bool RunImpl();
86   DECLARE_EXTENSION_FUNCTION_NAME("windows.remove")
87 };
88 
89 // Tabs
90 class GetTabFunction : public SyncExtensionFunction {
~GetTabFunction()91   ~GetTabFunction() {}
92   virtual bool RunImpl();
93   DECLARE_EXTENSION_FUNCTION_NAME("tabs.get")
94 };
95 class GetCurrentTabFunction : public SyncExtensionFunction {
~GetCurrentTabFunction()96   ~GetCurrentTabFunction() {}
97   virtual bool RunImpl();
98   DECLARE_EXTENSION_FUNCTION_NAME("tabs.getCurrent")
99 };
100 class GetSelectedTabFunction : public SyncExtensionFunction {
~GetSelectedTabFunction()101   ~GetSelectedTabFunction() {}
102   virtual bool RunImpl();
103   DECLARE_EXTENSION_FUNCTION_NAME("tabs.getSelected")
104 };
105 class GetAllTabsInWindowFunction : public SyncExtensionFunction {
~GetAllTabsInWindowFunction()106   ~GetAllTabsInWindowFunction() {}
107   virtual bool RunImpl();
108   DECLARE_EXTENSION_FUNCTION_NAME("tabs.getAllInWindow")
109 };
110 class CreateTabFunction : public SyncExtensionFunction {
~CreateTabFunction()111   ~CreateTabFunction() {}
112   virtual bool RunImpl();
113   DECLARE_EXTENSION_FUNCTION_NAME("tabs.create")
114 };
115 class UpdateTabFunction : public AsyncExtensionFunction,
116                           public TabContentsObserver {
117  public:
118   UpdateTabFunction();
119  private:
~UpdateTabFunction()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 };
128 class MoveTabFunction : public SyncExtensionFunction {
~MoveTabFunction()129   ~MoveTabFunction() {}
130   virtual bool RunImpl();
131   DECLARE_EXTENSION_FUNCTION_NAME("tabs.move")
132 };
133 class RemoveTabFunction : public SyncExtensionFunction {
~RemoveTabFunction()134   ~RemoveTabFunction() {}
135   virtual bool RunImpl();
136   DECLARE_EXTENSION_FUNCTION_NAME("tabs.remove")
137 };
138 class DetectTabLanguageFunction : public AsyncExtensionFunction,
139                                   public NotificationObserver {
140  private:
~DetectTabLanguageFunction()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 };
151 class 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 
~CaptureVisibleTabFunction()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