Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: content/renderer/render_widget.cc

Issue 1586523004: Revert of RenderWidgetCompositor should be decoupled from RenderWidget. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/renderer/render_widget.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_widget.h" 5 #include "content/renderer/render_widget.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/singleton.h" 15 #include "base/memory/singleton.h"
16 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
17 #include "base/metrics/histogram.h" 17 #include "base/metrics/histogram.h"
18 #include "base/stl_util.h" 18 #include "base/stl_util.h"
19 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
20 #include "base/sys_info.h" 20 #include "base/sys_info.h"
21 #include "base/trace_event/trace_event.h" 21 #include "base/trace_event/trace_event.h"
22 #include "base/trace_event/trace_event_synthetic_delay.h" 22 #include "base/trace_event/trace_event_synthetic_delay.h"
23 #include "build/build_config.h" 23 #include "build/build_config.h"
24 #include "cc/base/switches.h" 24 #include "cc/base/switches.h"
25 #include "cc/debug/benchmark_instrumentation.h" 25 #include "cc/debug/benchmark_instrumentation.h"
26 #include "cc/output/output_surface.h" 26 #include "cc/output/output_surface.h"
27 #include "cc/scheduler/begin_frame_source.h"
28 #include "cc/trees/layer_tree_host.h" 27 #include "cc/trees/layer_tree_host.h"
29 #include "components/scheduler/renderer/render_widget_scheduling_state.h" 28 #include "components/scheduler/renderer/render_widget_scheduling_state.h"
30 #include "components/scheduler/renderer/renderer_scheduler.h" 29 #include "components/scheduler/renderer/renderer_scheduler.h"
31 #include "content/child/npapi/webplugin.h" 30 #include "content/child/npapi/webplugin.h"
32 #include "content/common/content_switches_internal.h" 31 #include "content/common/content_switches_internal.h"
33 #include "content/common/gpu/client/context_provider_command_buffer.h" 32 #include "content/common/gpu/client/context_provider_command_buffer.h"
34 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 33 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
35 #include "content/common/gpu/gpu_process_launch_causes.h" 34 #include "content/common/gpu/gpu_process_launch_causes.h"
36 #include "content/common/input/synthetic_gesture_packet.h" 35 #include "content/common/input/synthetic_gesture_packet.h"
37 #include "content/common/input/web_input_event_traits.h" 36 #include "content/common/input/web_input_event_traits.h"
(...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 950
952 void RenderWidget::OnRequestMoveAck() { 951 void RenderWidget::OnRequestMoveAck() {
953 DCHECK(pending_window_rect_count_); 952 DCHECK(pending_window_rect_count_);
954 pending_window_rect_count_--; 953 pending_window_rect_count_--;
955 } 954 }
956 955
957 GURL RenderWidget::GetURLForGraphicsContext3D() { 956 GURL RenderWidget::GetURLForGraphicsContext3D() {
958 return GURL(); 957 return GURL();
959 } 958 }
960 959
961 void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
962 const ui::LatencyInfo& latency_info) {
963 if (!input_event)
964 return;
965 input_handler_->HandleInputEvent(*input_event, latency_info);
966 }
967
968 void RenderWidget::OnCursorVisibilityChange(bool is_visible) {
969 if (webwidget_)
970 webwidget_->setCursorVisibilityState(is_visible);
971 }
972
973 void RenderWidget::OnMouseCaptureLost() {
974 if (webwidget_)
975 webwidget_->mouseCaptureLost();
976 }
977
978 void RenderWidget::OnSetFocus(bool enable) {
979 if (webwidget_)
980 webwidget_->setFocus(enable);
981 }
982
983 ///////////////////////////////////////////////////////////////////////////////
984 // RenderWidgetCompositorDelegate
985
986 void RenderWidget::ApplyViewportDeltas(
987 const gfx::Vector2dF& inner_delta,
988 const gfx::Vector2dF& outer_delta,
989 const gfx::Vector2dF& elastic_overscroll_delta,
990 float page_scale,
991 float top_controls_delta) {
992 webwidget_->applyViewportDeltas(inner_delta, outer_delta,
993 elastic_overscroll_delta, page_scale,
994 top_controls_delta);
995 }
996
997 void RenderWidget::BeginMainFrame(double frame_time_sec) {
998 webwidget_->beginFrame(frame_time_sec);
999 }
1000
1001 scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { 960 scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
1002 // If the host is closing, then no more compositing is possible. This
1003 // prevents shutdown races between handling the close message and
1004 // the CreateOutputSurface task.
1005 if (host_closing_)
1006 return nullptr;
1007
1008 DCHECK(webwidget_); 961 DCHECK(webwidget_);
1009 // For widgets that are never visible, we don't start the compositor, so we 962 // For widgets that are never visible, we don't start the compositor, so we
1010 // never get a request for a cc::OutputSurface. 963 // never get a request for a cc::OutputSurface.
1011 DCHECK(!compositor_never_visible_); 964 DCHECK(!compositor_never_visible_);
1012 965
1013 const base::CommandLine& command_line = 966 const base::CommandLine& command_line =
1014 *base::CommandLine::ForCurrentProcess(); 967 *base::CommandLine::ForCurrentProcess();
1015 bool use_software = fallback; 968 bool use_software = fallback;
1016 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) 969 if (command_line.HasSwitch(switches::kDisableGpuCompositing))
1017 use_software = true; 970 use_software = true;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 return make_scoped_ptr(new CompositorOutputSurface( 1042 return make_scoped_ptr(new CompositorOutputSurface(
1090 routing_id(), output_surface_id, nullptr, nullptr, 1043 routing_id(), output_surface_id, nullptr, nullptr,
1091 std::move(software_device), frame_swap_message_queue_, true)); 1044 std::move(software_device), frame_swap_message_queue_, true));
1092 } 1045 }
1093 1046
1094 return make_scoped_ptr(new MailboxOutputSurface( 1047 return make_scoped_ptr(new MailboxOutputSurface(
1095 routing_id(), output_surface_id, context_provider, 1048 routing_id(), output_surface_id, context_provider,
1096 worker_context_provider, frame_swap_message_queue_, cc::RGBA_8888)); 1049 worker_context_provider, frame_swap_message_queue_, cc::RGBA_8888));
1097 } 1050 }
1098 1051
1099 scoped_ptr<cc::BeginFrameSource>
1100 RenderWidget::CreateExternalBeginFrameSource() {
1101 return compositor_deps_->CreateExternalBeginFrameSource(routing_id_);
1102 }
1103
1104 void RenderWidget::DidCommitAndDrawCompositorFrame() {
1105 // NOTE: Tests may break if this event is renamed or moved. See
1106 // tab_capture_performancetest.cc.
1107 TRACE_EVENT0("gpu", "RenderWidget::DidCommitAndDrawCompositorFrame");
1108 // Notify subclasses that we initiated the paint operation.
1109 DidInitiatePaint();
1110 }
1111
1112 void RenderWidget::DidCommitCompositorFrame() {
1113 FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_,
1114 DidCommitCompositorFrame());
1115 FOR_EACH_OBSERVER(RenderFrameProxy, render_frame_proxies_,
1116 DidCommitCompositorFrame());
1117 #if defined(VIDEO_HOLE)
1118 FOR_EACH_OBSERVER(RenderFrameImpl, video_hole_frames_,
1119 DidCommitCompositorFrame());
1120 #endif // defined(VIDEO_HOLE)
1121 input_handler_->FlushPendingInputEventAck();
1122 }
1123
1124 void RenderWidget::DidCompletePageScaleAnimation() {}
1125
1126 void RenderWidget::DidCompleteSwapBuffers() {
1127 TRACE_EVENT0("renderer", "RenderWidget::DidCompleteSwapBuffers");
1128
1129 // Notify subclasses threaded composited rendering was flushed to the screen.
1130 DidFlushPaint();
1131
1132 if (!next_paint_flags_ && !need_update_rect_for_auto_resize_ &&
1133 !plugin_window_moves_.size()) {
1134 return;
1135 }
1136
1137 ViewHostMsg_UpdateRect_Params params;
1138 params.view_size = size_;
1139 params.plugin_window_moves.swap(plugin_window_moves_);
1140 params.flags = next_paint_flags_;
1141
1142 Send(new ViewHostMsg_UpdateRect(routing_id_, params));
1143 next_paint_flags_ = 0;
1144 need_update_rect_for_auto_resize_ = false;
1145 }
1146
1147 bool RenderWidget::ForOOPIF() const {
1148 // TODO(simonhong): Remove this when we enable BeginFrame scheduling for
1149 // OOPIF(crbug.com/471411).
1150 return for_oopif_;
1151 }
1152
1153 void RenderWidget::ForwardCompositorProto(const std::vector<uint8_t>& proto) {
1154 Send(new ViewHostMsg_ForwardCompositorProto(routing_id_, proto));
1155 }
1156
1157 void RenderWidget::OnSwapBuffersAborted() { 1052 void RenderWidget::OnSwapBuffersAborted() {
1158 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted"); 1053 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted");
1159 // Schedule another frame so the compositor learns about it. 1054 // Schedule another frame so the compositor learns about it.
1160 ScheduleComposite(); 1055 ScheduleComposite();
1161 } 1056 }
1162 1057
1058 void RenderWidget::OnSwapBuffersPosted() {
1059 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersPosted");
1060 }
1061
1163 void RenderWidget::OnSwapBuffersComplete() { 1062 void RenderWidget::OnSwapBuffersComplete() {
1164 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersComplete"); 1063 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersComplete");
1165 1064
1166 // Notify subclasses that composited rendering was flushed to the screen. 1065 // Notify subclasses that composited rendering was flushed to the screen.
1167 DidFlushPaint(); 1066 DidFlushPaint();
1168 } 1067 }
1169 1068
1170 void RenderWidget::OnSwapBuffersPosted() { 1069 void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
1171 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersPosted"); 1070 const ui::LatencyInfo& latency_info) {
1071 if (!input_event)
1072 return;
1073 input_handler_->HandleInputEvent(*input_event, latency_info);
1172 } 1074 }
1173 1075
1174 void RenderWidget::RecordFrameTimingEvents( 1076 void RenderWidget::OnCursorVisibilityChange(bool is_visible) {
1175 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, 1077 if (webwidget_)
1176 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) { 1078 webwidget_->setCursorVisibilityState(is_visible);
1177 for (const auto& composite_event : *composite_events) {
1178 int64_t frameId = composite_event.first;
1179 const std::vector<cc::FrameTimingTracker::CompositeTimingEvent>& events =
1180 composite_event.second;
1181 std::vector<blink::WebFrameTimingEvent> webEvents;
1182 for (size_t i = 0; i < events.size(); ++i) {
1183 webEvents.push_back(blink::WebFrameTimingEvent(
1184 events[i].frame_id,
1185 (events[i].timestamp - base::TimeTicks()).InSecondsF()));
1186 }
1187 webwidget_->recordFrameTimingEvent(blink::WebWidget::CompositeEvent,
1188 frameId, webEvents);
1189 }
1190 for (const auto& main_frame_event : *main_frame_events) {
1191 int64_t frameId = main_frame_event.first;
1192 const std::vector<cc::FrameTimingTracker::MainFrameTimingEvent>& events =
1193 main_frame_event.second;
1194 std::vector<blink::WebFrameTimingEvent> webEvents;
1195 for (size_t i = 0; i < events.size(); ++i) {
1196 webEvents.push_back(blink::WebFrameTimingEvent(
1197 events[i].frame_id,
1198 (events[i].timestamp - base::TimeTicks()).InSecondsF(),
1199 (events[i].end_time - base::TimeTicks()).InSecondsF()));
1200 }
1201 webwidget_->recordFrameTimingEvent(blink::WebWidget::RenderEvent, frameId,
1202 webEvents);
1203 }
1204 } 1079 }
1205 1080
1206 void RenderWidget::ScheduleAnimation() { 1081 void RenderWidget::OnMouseCaptureLost() {
1207 scheduleAnimation(); 1082 if (webwidget_)
1083 webwidget_->mouseCaptureLost();
1208 } 1084 }
1209 1085
1210 void RenderWidget::UpdateVisualState() { 1086 void RenderWidget::OnSetFocus(bool enable) {
1211 webwidget_->updateAllLifecyclePhases(); 1087 if (webwidget_)
1212 } 1088 webwidget_->setFocus(enable);
1213
1214 void RenderWidget::WillBeginCompositorFrame() {
1215 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame");
1216
1217 // The UpdateTextInputState can result in further layout and possibly
1218 // enable GPU acceleration so they need to be called before any painting
1219 // is done.
1220 UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_NON_IME);
1221 UpdateSelectionBounds();
1222 } 1089 }
1223 1090
1224 /////////////////////////////////////////////////////////////////////////////// 1091 ///////////////////////////////////////////////////////////////////////////////
1225 // RenderWidgetInputHandlerDelegate 1092 // RenderWidgetInputHandlerDelegate
1226 1093
1227 void RenderWidget::FocusChangeComplete() {} 1094 void RenderWidget::FocusChangeComplete() {}
1228 1095
1229 bool RenderWidget::HasTouchEventHandlersAt(const gfx::Point& point) const { 1096 bool RenderWidget::HasTouchEventHandlersAt(const gfx::Point& point) const {
1230 return true; 1097 return true;
1231 } 1098 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1368 1235
1369 void RenderWidget::AutoResizeCompositor() { 1236 void RenderWidget::AutoResizeCompositor() {
1370 physical_backing_size_ = gfx::ScaleToCeiledSize(size_, device_scale_factor_); 1237 physical_backing_size_ = gfx::ScaleToCeiledSize(size_, device_scale_factor_);
1371 if (compositor_) 1238 if (compositor_)
1372 compositor_->setViewportSize(physical_backing_size_); 1239 compositor_->setViewportSize(physical_backing_size_);
1373 } 1240 }
1374 1241
1375 void RenderWidget::initializeLayerTreeView() { 1242 void RenderWidget::initializeLayerTreeView() {
1376 DCHECK(!host_closing_); 1243 DCHECK(!host_closing_);
1377 1244
1378 compositor_ = RenderWidgetCompositor::Create(this, device_scale_factor_, 1245 compositor_ = RenderWidgetCompositor::Create(this, compositor_deps_);
1379 compositor_deps_);
1380 compositor_->setViewportSize(physical_backing_size_); 1246 compositor_->setViewportSize(physical_backing_size_);
1381 OnDeviceScaleFactorChanged(); 1247 OnDeviceScaleFactorChanged();
1382 // For background pages and certain tests, we don't want to trigger 1248 // For background pages and certain tests, we don't want to trigger
1383 // OutputSurface creation. 1249 // OutputSurface creation.
1384 if (compositor_never_visible_ || !RenderThreadImpl::current()) 1250 if (compositor_never_visible_ || !RenderThreadImpl::current())
1385 compositor_->SetNeverVisible(); 1251 compositor_->SetNeverVisible();
1386 1252
1387 StartCompositor(); 1253 StartCompositor();
1388 } 1254 }
1389 1255
(...skipping 17 matching lines...) Expand all
1407 void RenderWidget::didMeaningfulLayout(blink::WebMeaningfulLayout layout_type) { 1273 void RenderWidget::didMeaningfulLayout(blink::WebMeaningfulLayout layout_type) {
1408 if (layout_type == blink::WebMeaningfulLayout::VisuallyNonEmpty) { 1274 if (layout_type == blink::WebMeaningfulLayout::VisuallyNonEmpty) {
1409 QueueMessage(new ViewHostMsg_DidFirstVisuallyNonEmptyPaint(routing_id_), 1275 QueueMessage(new ViewHostMsg_DidFirstVisuallyNonEmptyPaint(routing_id_),
1410 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); 1276 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE);
1411 } 1277 }
1412 1278
1413 FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_, 1279 FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_,
1414 DidMeaningfulLayout(layout_type)); 1280 DidMeaningfulLayout(layout_type));
1415 } 1281 }
1416 1282
1283 void RenderWidget::WillBeginCompositorFrame() {
1284 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame");
1285
1286 // The UpdateTextInputState can result in further layout and possibly
1287 // enable GPU acceleration so they need to be called before any painting
1288 // is done.
1289 UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_NON_IME);
1290 UpdateSelectionBounds();
1291 }
1292
1293 void RenderWidget::DidCommitCompositorFrame() {
1294 FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_,
1295 DidCommitCompositorFrame());
1296 FOR_EACH_OBSERVER(RenderFrameProxy, render_frame_proxies_,
1297 DidCommitCompositorFrame());
1298 #if defined(VIDEO_HOLE)
1299 FOR_EACH_OBSERVER(RenderFrameImpl, video_hole_frames_,
1300 DidCommitCompositorFrame());
1301 #endif // defined(VIDEO_HOLE)
1302 input_handler_->FlushPendingInputEventAck();
1303 }
1304
1305 void RenderWidget::DidCommitAndDrawCompositorFrame() {
1306 // NOTE: Tests may break if this event is renamed or moved. See
1307 // tab_capture_performancetest.cc.
1308 TRACE_EVENT0("gpu", "RenderWidget::DidCommitAndDrawCompositorFrame");
1309 // Notify subclasses that we initiated the paint operation.
1310 DidInitiatePaint();
1311 }
1312
1313 void RenderWidget::DidCompleteSwapBuffers() {
1314 TRACE_EVENT0("renderer", "RenderWidget::DidCompleteSwapBuffers");
1315
1316 // Notify subclasses threaded composited rendering was flushed to the screen.
1317 DidFlushPaint();
1318
1319 if (!next_paint_flags_ &&
1320 !need_update_rect_for_auto_resize_ &&
1321 !plugin_window_moves_.size()) {
1322 return;
1323 }
1324
1325 ViewHostMsg_UpdateRect_Params params;
1326 params.view_size = size_;
1327 params.plugin_window_moves.swap(plugin_window_moves_);
1328 params.flags = next_paint_flags_;
1329
1330 Send(new ViewHostMsg_UpdateRect(routing_id_, params));
1331 next_paint_flags_ = 0;
1332 need_update_rect_for_auto_resize_ = false;
1333 }
1334
1417 void RenderWidget::ScheduleComposite() { 1335 void RenderWidget::ScheduleComposite() {
1418 if (compositor_ && 1336 if (compositor_ &&
1419 compositor_deps_->GetCompositorImplThreadTaskRunner().get()) { 1337 compositor_deps_->GetCompositorImplThreadTaskRunner().get()) {
1420 compositor_->setNeedsAnimate(); 1338 compositor_->setNeedsAnimate();
1421 } 1339 }
1422 } 1340 }
1423 1341
1424 void RenderWidget::ScheduleCompositeWithForcedRedraw() { 1342 void RenderWidget::ScheduleCompositeWithForcedRedraw() {
1425 if (compositor_) { 1343 if (compositor_) {
1426 // Regardless of whether threaded compositing is enabled, always 1344 // Regardless of whether threaded compositing is enabled, always
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after
1959 selection_focus_rect_ = params.focus_rect; 1877 selection_focus_rect_ = params.focus_rect;
1960 webwidget_->selectionTextDirection(params.focus_dir, params.anchor_dir); 1878 webwidget_->selectionTextDirection(params.focus_dir, params.anchor_dir);
1961 params.is_anchor_first = webwidget_->isSelectionAnchorFirst(); 1879 params.is_anchor_first = webwidget_->isSelectionAnchorFirst();
1962 Send(new ViewHostMsg_SelectionBoundsChanged(routing_id_, params)); 1880 Send(new ViewHostMsg_SelectionBoundsChanged(routing_id_, params));
1963 } 1881 }
1964 } 1882 }
1965 1883
1966 UpdateCompositionInfo(false); 1884 UpdateCompositionInfo(false);
1967 } 1885 }
1968 1886
1887 void RenderWidget::ForwardCompositorProto(const std::vector<uint8_t>& proto) {
1888 Send(new ViewHostMsg_ForwardCompositorProto(routing_id_, proto));
1889 }
1890
1969 // Check blink::WebTextInputType and ui::TextInputType is kept in sync. 1891 // Check blink::WebTextInputType and ui::TextInputType is kept in sync.
1970 #define STATIC_ASSERT_WTIT_ENUM_MATCH(a, b) \ 1892 #define STATIC_ASSERT_WTIT_ENUM_MATCH(a, b) \
1971 static_assert(int(blink::WebTextInputType##a) \ 1893 static_assert(int(blink::WebTextInputType##a) \
1972 == int(ui::TEXT_INPUT_TYPE_##b), \ 1894 == int(ui::TEXT_INPUT_TYPE_##b), \
1973 "mismatching enums: " #a) 1895 "mismatching enums: " #a)
1974 1896
1975 STATIC_ASSERT_WTIT_ENUM_MATCH(None, NONE); 1897 STATIC_ASSERT_WTIT_ENUM_MATCH(None, NONE);
1976 STATIC_ASSERT_WTIT_ENUM_MATCH(Text, TEXT); 1898 STATIC_ASSERT_WTIT_ENUM_MATCH(Text, TEXT);
1977 STATIC_ASSERT_WTIT_ENUM_MATCH(Password, PASSWORD); 1899 STATIC_ASSERT_WTIT_ENUM_MATCH(Password, PASSWORD);
1978 STATIC_ASSERT_WTIT_ENUM_MATCH(Search, SEARCH); 1900 STATIC_ASSERT_WTIT_ENUM_MATCH(Search, SEARCH);
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
2267 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { 2189 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) {
2268 video_hole_frames_.AddObserver(frame); 2190 video_hole_frames_.AddObserver(frame);
2269 } 2191 }
2270 2192
2271 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { 2193 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) {
2272 video_hole_frames_.RemoveObserver(frame); 2194 video_hole_frames_.RemoveObserver(frame);
2273 } 2195 }
2274 #endif // defined(VIDEO_HOLE) 2196 #endif // defined(VIDEO_HOLE)
2275 2197
2276 } // namespace content 2198 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_widget.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698