Home | History | Annotate | Download | only in devtools
      1 // Copyright (c) 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 CONTENT_BROWSER_DEVTOOLS_RENDERER_OVERRIDES_HANDLER_H_
      6 #define CONTENT_BROWSER_DEVTOOLS_RENDERER_OVERRIDES_HANDLER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/compiler_specific.h"
     10 #include "base/memory/ref_counted_memory.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "base/memory/weak_ptr.h"
     13 #include "base/time/time.h"
     14 #include "cc/output/compositor_frame_metadata.h"
     15 #include "content/browser/devtools/devtools_protocol.h"
     16 #include "content/common/content_export.h"
     17 
     18 class SkBitmap;
     19 
     20 namespace IPC {
     21 class Message;
     22 }
     23 
     24 namespace content {
     25 
     26 class DevToolsAgentHost;
     27 class DevToolsTracingHandler;
     28 
     29 // Overrides Inspector commands before they are sent to the renderer.
     30 // May override the implementation completely, ignore it, or handle
     31 // additional browser process implementation details.
     32 class CONTENT_EXPORT RendererOverridesHandler
     33     : public DevToolsProtocol::Handler {
     34  public:
     35   explicit RendererOverridesHandler(DevToolsAgentHost* agent);
     36   virtual ~RendererOverridesHandler();
     37 
     38   void OnClientDetached();
     39   void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata);
     40   void OnVisibilityChanged(bool visible);
     41 
     42  private:
     43   void InnerSwapCompositorFrame();
     44   void ParseCaptureParameters(DevToolsProtocol::Command* command,
     45                               std::string* format, int* quality,
     46                               double* scale);
     47   base::DictionaryValue* CreateScreenshotResponse(
     48       const std::vector<unsigned char>& png_data);
     49 
     50   // DOM domain.
     51   scoped_refptr<DevToolsProtocol::Response>
     52       GrantPermissionsForSetFileInputFiles(
     53           scoped_refptr<DevToolsProtocol::Command> command);
     54 
     55   // Network domain.
     56   scoped_refptr<DevToolsProtocol::Response> ClearBrowserCache(
     57       scoped_refptr<DevToolsProtocol::Command> command);
     58   scoped_refptr<DevToolsProtocol::Response> ClearBrowserCookies(
     59       scoped_refptr<DevToolsProtocol::Command> command);
     60 
     61   // Page domain.
     62   scoped_refptr<DevToolsProtocol::Response> PageDisable(
     63       scoped_refptr<DevToolsProtocol::Command> command);
     64   scoped_refptr<DevToolsProtocol::Response> PageHandleJavaScriptDialog(
     65       scoped_refptr<DevToolsProtocol::Command> command);
     66   scoped_refptr<DevToolsProtocol::Response> PageNavigate(
     67       scoped_refptr<DevToolsProtocol::Command> command);
     68   scoped_refptr<DevToolsProtocol::Response> PageReload(
     69       scoped_refptr<DevToolsProtocol::Command> command);
     70   scoped_refptr<DevToolsProtocol::Response> PageGetNavigationHistory(
     71       scoped_refptr<DevToolsProtocol::Command> command);
     72   scoped_refptr<DevToolsProtocol::Response> PageNavigateToHistoryEntry(
     73       scoped_refptr<DevToolsProtocol::Command> command);
     74   scoped_refptr<DevToolsProtocol::Response> PageCaptureScreenshot(
     75       scoped_refptr<DevToolsProtocol::Command> command);
     76   scoped_refptr<DevToolsProtocol::Response> PageCanScreencast(
     77       scoped_refptr<DevToolsProtocol::Command> command);
     78   scoped_refptr<DevToolsProtocol::Response> PageStartScreencast(
     79       scoped_refptr<DevToolsProtocol::Command> command);
     80   scoped_refptr<DevToolsProtocol::Response> PageStopScreencast(
     81       scoped_refptr<DevToolsProtocol::Command> command);
     82   scoped_refptr<DevToolsProtocol::Response> PageQueryUsageAndQuota(
     83       scoped_refptr<DevToolsProtocol::Command>);
     84 
     85   void ScreenshotCaptured(
     86       scoped_refptr<DevToolsProtocol::Command> command,
     87       scoped_refptr<base::RefCountedBytes> png_data);
     88 
     89   void ScreencastFrameCaptured(
     90       const std::string& format,
     91       int quality,
     92       const cc::CompositorFrameMetadata& metadata,
     93       bool success,
     94       const SkBitmap& bitmap);
     95 
     96   void PageQueryUsageAndQuotaCompleted(
     97      scoped_refptr<DevToolsProtocol::Command>,
     98      scoped_ptr<base::DictionaryValue> response_data);
     99 
    100   void NotifyScreencastVisibility(bool visible);
    101 
    102   // Input domain.
    103   scoped_refptr<DevToolsProtocol::Response> InputDispatchMouseEvent(
    104       scoped_refptr<DevToolsProtocol::Command> command);
    105   scoped_refptr<DevToolsProtocol::Response> InputDispatchGestureEvent(
    106       scoped_refptr<DevToolsProtocol::Command> command);
    107 
    108   DevToolsAgentHost* agent_;
    109   scoped_refptr<DevToolsProtocol::Command> screencast_command_;
    110   cc::CompositorFrameMetadata last_compositor_frame_metadata_;
    111   base::TimeTicks last_frame_time_;
    112   int capture_retry_count_;
    113   base::WeakPtrFactory<RendererOverridesHandler> weak_factory_;
    114   DISALLOW_COPY_AND_ASSIGN(RendererOverridesHandler);
    115 };
    116 
    117 }  // namespace content
    118 
    119 #endif  // CONTENT_BROWSER_DEVTOOLS_RENDERER_OVERRIDES_HANDLER_H_
    120