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