Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / capture_web_contents_function.h
1 // Copyright 2013 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_API_CAPTURE_WEB_CONTENTS_FUNCTION_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_CAPTURE_WEB_CONTENTS_FUNCTION_H_
7
8 #include "chrome/browser/extensions/chrome_extension_function.h"
9 #include "chrome/common/extensions/api/types.h"
10
11 class SkBitmap;
12
13 namespace content {
14 class WebContents;
15 }
16
17 namespace extensions {
18
19 // Base class for capturing visibile area of a WebContents.
20 // This is used by both webview.captureVisibleRegion and tabs.captureVisibleTab.
21 class CaptureWebContentsFunction : public ChromeAsyncExtensionFunction {
22  public:
23   CaptureWebContentsFunction();
24
25  protected:
26   virtual ~CaptureWebContentsFunction();
27
28   // ExtensionFunction implementation.
29   virtual bool HasPermission() OVERRIDE;
30   virtual bool RunAsync() OVERRIDE;
31
32   virtual bool IsScreenshotEnabled() = 0;
33   virtual content::WebContents* GetWebContentsForID(int context_id) = 0;
34
35   enum FailureReason {
36     FAILURE_REASON_UNKNOWN,
37     FAILURE_REASON_ENCODING_FAILED,
38     FAILURE_REASON_VIEW_INVISIBLE
39   };
40   virtual void OnCaptureFailure(FailureReason reason) = 0;
41
42  private:
43   typedef api::types::ImageDetails ImageDetails;
44
45   void CopyFromBackingStoreComplete(bool succeed, const SkBitmap& bitmap);
46   void OnCaptureSuccess(const SkBitmap& bitmap);
47
48   // |context_id_| is the ID used to find the relevant WebContents. In the
49   // |tabs.captureVisibleTab()| api, this represents the window-id, and in the
50   // |webview.captureVisibleRegion()| api, this represents the instance-id of
51   // the guest.
52   int context_id_;
53
54   // The format (JPEG vs PNG) of the resulting image.  Set in RunAsync().
55   ImageDetails::Format image_format_;
56
57   // Quality setting to use when encoding jpegs.  Set in RunAsync().
58   int image_quality_;
59
60   DISALLOW_COPY_AND_ASSIGN(CaptureWebContentsFunction);
61 };
62
63 }  // namespace extensions
64
65 #endif  // CHROME_BROWSER_EXTENSIONS_API_CAPTURE_WEB_CONTENTS_FUNCTION_H_