• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 EXTENSIONS_BROWSER_API_CAPTURE_WEB_CONTENTS_FUNCTION_H_
6 #define EXTENSIONS_BROWSER_API_CAPTURE_WEB_CONTENTS_FUNCTION_H_
7 
8 #include "extensions/browser/extension_function.h"
9 #include "extensions/common/api/extension_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 AsyncExtensionFunction {
22  public:
CaptureWebContentsFunction()23   CaptureWebContentsFunction() {}
24 
25  protected:
~CaptureWebContentsFunction()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 core_api::extension_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  // EXTENSIONS_BROWSER_API_CAPTURE_WEB_CONTENTS_FUNCTION_H_
66