Home | History | Annotate | Download | only in api
      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:
     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 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