blob: 27285b59469ab9d1c40df565b0c4c7a32804bc80 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_DEVTOOLS_PROTOCOL_PAGE_HANDLER_H_
#define CONTENT_BROWSER_DEVTOOLS_PROTOCOL_PAGE_HANDLER_H_
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "cc/output/compositor_frame_metadata.h"
#include "content/browser/devtools/protocol/devtools_protocol_handler.h"
#include "content/public/browser/readback_types.h"
class SkBitmap;
namespace content {
class RenderViewHostImpl;
namespace devtools {
namespace page {
class ColorPicker;
class FrameRecorder;
class PageHandler {
public:
typedef DevToolsProtocolClient::Response Response;
PageHandler();
virtual ~PageHandler();
void SetRenderViewHost(RenderViewHostImpl* host);
void SetClient(scoped_ptr<Client> client);
void Detached();
void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata);
void OnVisibilityChanged(bool visible);
void DidAttachInterstitialPage();
void DidDetachInterstitialPage();
Response Enable();
Response Disable();
Response Reload(const bool* ignoreCache,
const std::string* script_to_evaluate_on_load,
const std::string* script_preprocessor = NULL);
Response Navigate(const std::string& url, FrameId* frame_id);
using NavigationEntries = std::vector<scoped_refptr<NavigationEntry>>;
Response GetNavigationHistory(int* current_index,
NavigationEntries* entries);
Response NavigateToHistoryEntry(int entry_id);
Response SetGeolocationOverride(double* latitude,
double* longitude,
double* accuracy);
Response ClearGeolocationOverride();
Response SetTouchEmulationEnabled(bool enabled,
const std::string* configuration);
Response CaptureScreenshot(DevToolsCommandId command_id);
Response CanScreencast(bool* result);
Response CanEmulate(bool* result);
Response StartScreencast(const std::string* format,
const int* quality,
const int* max_width,
const int* max_height);
Response StopScreencast();
Response ScreencastFrameAck(int frame_number);
Response StartRecordingFrames(int max_frame_count);
Response StopRecordingFrames(DevToolsCommandId command_id);
Response CancelRecordingFrames();
Response HandleJavaScriptDialog(bool accept, const std::string* prompt_text);
Response QueryUsageAndQuota(DevToolsCommandId command_id,
const std::string& security_origin);
Response SetColorPickerEnabled(bool enabled);
private:
void UpdateTouchEventEmulationState();
void NotifyScreencastVisibility(bool visible);
void InnerSwapCompositorFrame();
void ScreencastFrameCaptured(const cc::CompositorFrameMetadata& metadata,
const SkBitmap& bitmap,
ReadbackResponse response);
void ScreencastFrameEncoded(const cc::CompositorFrameMetadata& metadata,
const base::Time& timestamp,
const std::string& data);
void ScreenshotCaptured(
DevToolsCommandId command_id,
const unsigned char* png_data,
size_t png_size);
void OnColorPicked(int r, int g, int b, int a);
void OnFramesRecorded(
DevToolsCommandId command_id,
scoped_refptr<StopRecordingFramesResponse> response_data);
void QueryUsageAndQuotaCompleted(
DevToolsCommandId command_id,
scoped_refptr<QueryUsageAndQuotaResponse> response);
bool enabled_;
bool touch_emulation_enabled_;
std::string touch_emulation_configuration_;
bool screencast_enabled_;
std::string screencast_format_;
int screencast_quality_;
int screencast_max_width_;
int screencast_max_height_;
int capture_retry_count_;
bool has_compositor_frame_metadata_;
cc::CompositorFrameMetadata next_compositor_frame_metadata_;
cc::CompositorFrameMetadata last_compositor_frame_metadata_;
int screencast_frame_sent_;
int screencast_frame_acked_;
bool processing_screencast_frame_;
scoped_ptr<ColorPicker> color_picker_;
scoped_ptr<FrameRecorder> frame_recorder_;
RenderViewHostImpl* host_;
scoped_ptr<Client> client_;
base::WeakPtrFactory<PageHandler> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(PageHandler);
};
} // namespace page
} // namespace devtools
} // namespace content
#endif // CONTENT_BROWSER_DEVTOOLS_PROTOCOL_PAGE_HANDLER_H_