• 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 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_
66