1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
// 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_dispatcher.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/readback_types.h"
class SkBitmap;
namespace content {
class RenderFrameHostImpl;
class WebContentsImpl;
namespace devtools {
namespace page {
class ColorPicker;
class PageHandler : public NotificationObserver {
public:
typedef DevToolsProtocolClient::Response Response;
class ScreencastListener {
public:
virtual ~ScreencastListener() { }
virtual void ScreencastEnabledChanged() = 0;
};
PageHandler();
~PageHandler() override;
void SetRenderFrameHost(RenderFrameHostImpl* host);
void SetClient(scoped_ptr<Client> client);
void Detached();
void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata);
void DidAttachInterstitialPage();
void DidDetachInterstitialPage();
void SetScreencastListener(ScreencastListener* listener);
bool screencast_enabled() const { return enabled_ && screencast_enabled_; }
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 CaptureScreenshot(DevToolsCommandId command_id);
Response CanScreencast(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 HandleJavaScriptDialog(bool accept, const std::string* prompt_text);
Response QueryUsageAndQuota(DevToolsCommandId command_id,
const std::string& security_origin);
Response SetColorPickerEnabled(bool enabled);
private:
WebContentsImpl* GetWebContents();
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);
// NotificationObserver overrides.
void Observe(int type,
const NotificationSource& source,
const NotificationDetails& details) override;
bool enabled_;
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_;
RenderFrameHostImpl* host_;
scoped_ptr<Client> client_;
ScreencastListener* screencast_listener_;
NotificationRegistrar registrar_;
base::WeakPtrFactory<PageHandler> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(PageHandler);
};
} // namespace page
} // namespace devtools
} // namespace content
#endif // CONTENT_BROWSER_DEVTOOLS_PROTOCOL_PAGE_HANDLER_H_
|