OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 maximum_zoom_level_(ZoomFactorToZoomLevel(kMaxTextSizeMultiplier)), | 349 maximum_zoom_level_(ZoomFactorToZoomLevel(kMaxTextSizeMultiplier)), |
350 zoom_factor_for_device_scale_factor_(0.f), | 350 zoom_factor_for_device_scale_factor_(0.f), |
351 maximum_legible_scale_(1), | 351 maximum_legible_scale_(1), |
352 double_tap_zoom_page_scale_factor_(0), | 352 double_tap_zoom_page_scale_factor_(0), |
353 double_tap_zoom_pending_(false), | 353 double_tap_zoom_pending_(false), |
354 enable_fake_page_scale_animation_for_testing_(false), | 354 enable_fake_page_scale_animation_for_testing_(false), |
355 fake_page_scale_animation_page_scale_factor_(0), | 355 fake_page_scale_animation_page_scale_factor_(0), |
356 fake_page_scale_animation_use_anchor_(false), | 356 fake_page_scale_animation_use_anchor_(false), |
357 compositor_device_scale_factor_override_(0), | 357 compositor_device_scale_factor_override_(0), |
358 suppress_next_keypress_event_(false), | 358 suppress_next_keypress_event_(false), |
359 ime_accept_events_(true), | |
360 dev_tools_emulator_(nullptr), | 359 dev_tools_emulator_(nullptr), |
361 tabs_to_links_(false), | 360 tabs_to_links_(false), |
362 layer_tree_view_(nullptr), | 361 layer_tree_view_(nullptr), |
363 root_layer_(nullptr), | 362 root_layer_(nullptr), |
364 root_graphics_layer_(nullptr), | 363 root_graphics_layer_(nullptr), |
365 visual_viewport_container_layer_(nullptr), | 364 visual_viewport_container_layer_(nullptr), |
366 matches_heuristics_for_gpu_rasterization_(false), | 365 matches_heuristics_for_gpu_rasterization_(false), |
367 fling_modifier_(0), | 366 fling_modifier_(0), |
368 fling_source_device_(kWebGestureDeviceUninitialized), | 367 fling_source_device_(kWebGestureDeviceUninitialized), |
369 fullscreen_controller_(FullscreenController::Create(this)), | 368 fullscreen_controller_(FullscreenController::Create(this)), |
(...skipping 1912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2282 page_->SetIsCursorVisible(is_visible); | 2281 page_->SetIsCursorVisible(is_visible); |
2283 } | 2282 } |
2284 | 2283 |
2285 void WebViewImpl::MouseCaptureLost() { | 2284 void WebViewImpl::MouseCaptureLost() { |
2286 TRACE_EVENT_ASYNC_END0("input", "capturing mouse", this); | 2285 TRACE_EVENT_ASYNC_END0("input", "capturing mouse", this); |
2287 mouse_capture_node_ = nullptr; | 2286 mouse_capture_node_ = nullptr; |
2288 } | 2287 } |
2289 | 2288 |
2290 void WebViewImpl::SetFocus(bool enable) { | 2289 void WebViewImpl::SetFocus(bool enable) { |
2291 page_->GetFocusController().SetFocused(enable); | 2290 page_->GetFocusController().SetFocused(enable); |
| 2291 LocalFrame* focused_frame = page_->GetFocusController().FocusedFrame(); |
2292 if (enable) { | 2292 if (enable) { |
2293 page_->GetFocusController().SetActive(true); | 2293 page_->GetFocusController().SetActive(true); |
2294 LocalFrame* focused_frame = page_->GetFocusController().FocusedFrame(); | |
2295 if (focused_frame) { | 2294 if (focused_frame) { |
2296 Element* element = focused_frame->GetDocument()->FocusedElement(); | 2295 Element* element = focused_frame->GetDocument()->FocusedElement(); |
2297 if (element && focused_frame->Selection() | 2296 if (element && focused_frame->Selection() |
2298 .ComputeVisibleSelectionInDOMTreeDeprecated() | 2297 .ComputeVisibleSelectionInDOMTreeDeprecated() |
2299 .IsNone()) { | 2298 .IsNone()) { |
2300 // If the selection was cleared while the WebView was not | 2299 // If the selection was cleared while the WebView was not |
2301 // focused, then the focus element shows with a focus ring but | 2300 // focused, then the focus element shows with a focus ring but |
2302 // no caret and does respond to keyboard inputs. | 2301 // no caret and does respond to keyboard inputs. |
2303 focused_frame->GetDocument()->UpdateStyleAndLayoutTree(); | 2302 focused_frame->GetDocument()->UpdateStyleAndLayoutTree(); |
2304 if (element->IsTextControl()) { | 2303 if (element->IsTextControl()) { |
2305 element->UpdateFocusAppearance(SelectionBehaviorOnFocus::kRestore); | 2304 element->UpdateFocusAppearance(SelectionBehaviorOnFocus::kRestore); |
2306 } else if (HasEditableStyle(*element)) { | 2305 } else if (HasEditableStyle(*element)) { |
2307 // updateFocusAppearance() selects all the text of | 2306 // updateFocusAppearance() selects all the text of |
2308 // contentseditable DIVs. So we set the selection explicitly | 2307 // contentseditable DIVs. So we set the selection explicitly |
2309 // instead. Note that this has the side effect of moving the | 2308 // instead. Note that this has the side effect of moving the |
2310 // caret back to the beginning of the text. | 2309 // caret back to the beginning of the text. |
2311 Position position(element, 0); | 2310 Position position(element, 0); |
2312 focused_frame->Selection().SetSelection( | 2311 focused_frame->Selection().SetSelection( |
2313 SelectionInDOMTree::Builder().Collapse(position).Build()); | 2312 SelectionInDOMTree::Builder().Collapse(position).Build()); |
2314 } | 2313 } |
2315 } | 2314 } |
| 2315 // TODO(ekaramad): We need to figure out the right way to propagate page |
| 2316 // focus to OOPIFs. Right now WebFrameWidgetImpl::SetFocus never gets |
| 2317 // called (https://crbug.com/689777). |
| 2318 WebLocalFrameBase::FromFrame(focused_frame->LocalFrameRoot()) |
| 2319 ->FrameWidget() |
| 2320 ->ime_accept_events_ = true; |
2316 } | 2321 } |
2317 ime_accept_events_ = true; | |
2318 } else { | 2322 } else { |
2319 HidePopups(); | 2323 HidePopups(); |
2320 | 2324 |
2321 // Clear focus on the currently focused frame if any. | 2325 // Clear focus on the currently focused frame if any. |
2322 if (!page_) | 2326 if (!page_ || !focused_frame) |
2323 return; | 2327 return; |
2324 | 2328 |
2325 LocalFrame* frame = page_->MainFrame() && page_->MainFrame()->IsLocalFrame() | 2329 // Finish an ongoing composition to delete the composition node. |
2326 ? page_->DeprecatedLocalMainFrame() | 2330 if (focused_frame->GetInputMethodController().HasComposition()) { |
2327 : nullptr; | 2331 // TODO(editing-dev): The use of |
2328 if (!frame) | 2332 // updateStyleAndLayoutIgnorePendingStylesheets needs to be audited. |
2329 return; | 2333 // See http://crbug.com/590369 for more details. |
| 2334 focused_frame->GetDocument() |
| 2335 ->UpdateStyleAndLayoutIgnorePendingStylesheets(); |
2330 | 2336 |
2331 LocalFrame* focused_frame = FocusedLocalFrameInWidget(); | 2337 focused_frame->GetInputMethodController().FinishComposingText( |
2332 if (focused_frame) { | 2338 InputMethodController::kKeepSelection); |
2333 // Finish an ongoing composition to delete the composition node. | |
2334 if (focused_frame->GetInputMethodController().HasComposition()) { | |
2335 // TODO(editing-dev): The use of | |
2336 // updateStyleAndLayoutIgnorePendingStylesheets needs to be audited. | |
2337 // See http://crbug.com/590369 for more details. | |
2338 focused_frame->GetDocument() | |
2339 ->UpdateStyleAndLayoutIgnorePendingStylesheets(); | |
2340 | |
2341 focused_frame->GetInputMethodController().FinishComposingText( | |
2342 InputMethodController::kKeepSelection); | |
2343 } | 2339 } |
2344 ime_accept_events_ = false; | 2340 // TODO(ekaramad): We need to figure out the right way to propagate page |
2345 } | 2341 // focus to OOPIFs. Right now WebFrameWidgetImpl::SetFocus never gets |
| 2342 // called (https://crbug.com/689777). |
| 2343 WebLocalFrameBase::FromFrame(focused_frame->LocalFrameRoot()) |
| 2344 ->FrameWidget() |
| 2345 ->ime_accept_events_ = false; |
2346 } | 2346 } |
2347 } | 2347 } |
2348 | 2348 |
2349 // TODO(ekaramad):This method is almost duplicated in WebFrameWidgetImpl as | 2349 // TODO(ekaramad):This method is almost duplicated in WebFrameWidgetImpl as |
2350 // well. This code needs to be refactored (http://crbug.com/629721). | 2350 // well. This code needs to be refactored (http://crbug.com/629721). |
2351 WebRange WebViewImpl::CompositionRange() { | 2351 WebRange WebViewImpl::CompositionRange() { |
2352 LocalFrame* focused = FocusedLocalFrameAvailableForIme(); | 2352 LocalFrame* focused = FocusedLocalFrameAvailableForIme(); |
2353 if (!focused) | 2353 if (!focused) |
2354 return WebRange(); | 2354 return WebRange(); |
2355 | 2355 |
(...skipping 1778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4134 // TODO(oshima): Investigate if this should return the ScreenInfo's scale | 4134 // TODO(oshima): Investigate if this should return the ScreenInfo's scale |
4135 // factor rather than page's scale factor, which can be 1 in use-zoom-for-dsf | 4135 // factor rather than page's scale factor, which can be 1 in use-zoom-for-dsf |
4136 // mode. | 4136 // mode. |
4137 if (!GetPage()) | 4137 if (!GetPage()) |
4138 return 1; | 4138 return 1; |
4139 | 4139 |
4140 return GetPage()->DeviceScaleFactorDeprecated(); | 4140 return GetPage()->DeviceScaleFactorDeprecated(); |
4141 } | 4141 } |
4142 | 4142 |
4143 LocalFrame* WebViewImpl::FocusedLocalFrameInWidget() const { | 4143 LocalFrame* WebViewImpl::FocusedLocalFrameInWidget() const { |
4144 if (!MainFrameImpl()) | 4144 if (auto* frame = MainFrameImpl()) |
4145 return nullptr; | 4145 return frame->FrameWidget()->FocusedLocalFrameInWidget(); |
4146 | 4146 return nullptr; |
4147 LocalFrame* focused_frame = ToLocalFrame(FocusedCoreFrame()); | |
4148 if (focused_frame->LocalFrameRoot() != MainFrameImpl()->GetFrame()) | |
4149 return nullptr; | |
4150 return focused_frame; | |
4151 } | 4147 } |
4152 | 4148 |
4153 LocalFrame* WebViewImpl::FocusedLocalFrameAvailableForIme() const { | 4149 LocalFrame* WebViewImpl::FocusedLocalFrameAvailableForIme() const { |
4154 return ime_accept_events_ ? FocusedLocalFrameInWidget() : nullptr; | 4150 if (auto* frame = MainFrameImpl()) |
| 4151 return frame->FrameWidget()->FocusedLocalFrameAvailableForIme(); |
| 4152 return nullptr; |
4155 } | 4153 } |
4156 | 4154 |
4157 } // namespace blink | 4155 } // namespace blink |
OLD | NEW |