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