| 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 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 { | 312 { |
| 313 ASSERT(pageLoadDeferrerStack().size()); | 313 ASSERT(pageLoadDeferrerStack().size()); |
| 314 | 314 |
| 315 delete pageLoadDeferrerStack().last(); | 315 delete pageLoadDeferrerStack().last(); |
| 316 pageLoadDeferrerStack().removeLast(); | 316 pageLoadDeferrerStack().removeLast(); |
| 317 } | 317 } |
| 318 | 318 |
| 319 void WebViewImpl::setMainFrame(WebFrame* frame) | 319 void WebViewImpl::setMainFrame(WebFrame* frame) |
| 320 { | 320 { |
| 321 if (frame->isWebLocalFrame()) | 321 if (frame->isWebLocalFrame()) |
| 322 toWebLocalFrameImpl(frame)->initializeWebCoreFrame(&page()->frameHost(),
0, nullAtom, nullAtom); | 322 toWebLocalFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0,
nullAtom, nullAtom); |
| 323 else | 323 else |
| 324 toWebRemoteFrameImpl(frame)->initializeWebCoreFrame(&page()->frameHost()
, 0, nullAtom); | 324 toWebRemoteFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0
, nullAtom); |
| 325 } | 325 } |
| 326 | 326 |
| 327 void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient) | 327 void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient) |
| 328 { | 328 { |
| 329 m_autofillClient = autofillClient; | 329 m_autofillClient = autofillClient; |
| 330 } | 330 } |
| 331 | 331 |
| 332 void WebViewImpl::setDevToolsAgentClient(WebDevToolsAgentClient* devToolsClient) | 332 void WebViewImpl::setDevToolsAgentClient(WebDevToolsAgentClient* devToolsClient) |
| 333 { | 333 { |
| 334 if (devToolsClient) | 334 if (devToolsClient) |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 870 | 870 |
| 871 void WebViewImpl::setShowScrollBottleneckRects(bool show) | 871 void WebViewImpl::setShowScrollBottleneckRects(bool show) |
| 872 { | 872 { |
| 873 if (m_layerTreeView) | 873 if (m_layerTreeView) |
| 874 m_layerTreeView->setShowScrollBottleneckRects(show); | 874 m_layerTreeView->setShowScrollBottleneckRects(show); |
| 875 m_showScrollBottleneckRects = show; | 875 m_showScrollBottleneckRects = show; |
| 876 } | 876 } |
| 877 | 877 |
| 878 void WebViewImpl::getSelectionRootBounds(WebRect& bounds) const | 878 void WebViewImpl::getSelectionRootBounds(WebRect& bounds) const |
| 879 { | 879 { |
| 880 const Frame* frame = focusedWebCoreFrame(); | 880 const Frame* frame = focusedCoreFrame(); |
| 881 if (!frame || !frame->isLocalFrame()) | 881 if (!frame || !frame->isLocalFrame()) |
| 882 return; | 882 return; |
| 883 | 883 |
| 884 Element* root = toLocalFrame(frame)->selection().rootEditableElementOrDocume
ntElement(); | 884 Element* root = toLocalFrame(frame)->selection().rootEditableElementOrDocume
ntElement(); |
| 885 if (!root) | 885 if (!root) |
| 886 return; | 886 return; |
| 887 | 887 |
| 888 // If the selection is inside a form control, the root will be a <div> that | 888 // If the selection is inside a form control, the root will be a <div> that |
| 889 // behaves as the editor but we want to return the actual element's bounds. | 889 // behaves as the editor but we want to return the actual element's bounds. |
| 890 // In practice, that means <textarea> and <input> controls that behave like | 890 // In practice, that means <textarea> and <input> controls that behave like |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 return m_selectPopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)
); | 936 return m_selectPopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)
); |
| 937 if (m_pagePopup) { | 937 if (m_pagePopup) { |
| 938 m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); | 938 m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); |
| 939 // We need to ignore the next Char event after this otherwise pressing | 939 // We need to ignore the next Char event after this otherwise pressing |
| 940 // enter when selecting an item in the popup will go to the page. | 940 // enter when selecting an item in the popup will go to the page. |
| 941 if (WebInputEvent::RawKeyDown == event.type) | 941 if (WebInputEvent::RawKeyDown == event.type) |
| 942 m_suppressNextKeypressEvent = true; | 942 m_suppressNextKeypressEvent = true; |
| 943 return true; | 943 return true; |
| 944 } | 944 } |
| 945 | 945 |
| 946 RefPtr<Frame> focusedFrame = focusedWebCoreFrame(); | 946 RefPtr<Frame> focusedFrame = focusedCoreFrame(); |
| 947 if (focusedFrame && focusedFrame->isRemoteFrameTemporary()) { | 947 if (focusedFrame && focusedFrame->isRemoteFrameTemporary()) { |
| 948 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrameT
emporary(focusedFrame.get())); | 948 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrameT
emporary(focusedFrame.get())); |
| 949 webFrame->client()->forwardInputEvent(&event); | 949 webFrame->client()->forwardInputEvent(&event); |
| 950 return true; | 950 return true; |
| 951 } | 951 } |
| 952 | 952 |
| 953 if (!focusedFrame || !focusedFrame->isLocalFrame()) | 953 if (!focusedFrame || !focusedFrame->isLocalFrame()) |
| 954 return false; | 954 return false; |
| 955 | 955 |
| 956 RefPtr<LocalFrame> frame = toLocalFrame(focusedFrame.get()); | 956 RefPtr<LocalFrame> frame = toLocalFrame(focusedFrame.get()); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 999 bool suppress = m_suppressNextKeypressEvent; | 999 bool suppress = m_suppressNextKeypressEvent; |
| 1000 m_suppressNextKeypressEvent = false; | 1000 m_suppressNextKeypressEvent = false; |
| 1001 | 1001 |
| 1002 // If there is a select popup, it should be the one processing the event, | 1002 // If there is a select popup, it should be the one processing the event, |
| 1003 // not the page. | 1003 // not the page. |
| 1004 if (m_selectPopup) | 1004 if (m_selectPopup) |
| 1005 return m_selectPopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)
); | 1005 return m_selectPopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)
); |
| 1006 if (m_pagePopup) | 1006 if (m_pagePopup) |
| 1007 return m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); | 1007 return m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); |
| 1008 | 1008 |
| 1009 LocalFrame* frame = toLocalFrame(focusedWebCoreFrame()); | 1009 LocalFrame* frame = toLocalFrame(focusedCoreFrame()); |
| 1010 if (!frame) | 1010 if (!frame) |
| 1011 return suppress; | 1011 return suppress; |
| 1012 | 1012 |
| 1013 EventHandler& handler = frame->eventHandler(); | 1013 EventHandler& handler = frame->eventHandler(); |
| 1014 | 1014 |
| 1015 PlatformKeyboardEventBuilder evt(event); | 1015 PlatformKeyboardEventBuilder evt(event); |
| 1016 if (!evt.isCharacterKey()) | 1016 if (!evt.isCharacterKey()) |
| 1017 return true; | 1017 return true; |
| 1018 | 1018 |
| 1019 // Accesskeys are triggered by char events and can't be suppressed. | 1019 // Accesskeys are triggered by char events and can't be suppressed. |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 if (!page()->mainFrame()->isLocalFrame()) | 1376 if (!page()->mainFrame()->isLocalFrame()) |
| 1377 return; | 1377 return; |
| 1378 m_contextMenuAllowed = true; | 1378 m_contextMenuAllowed = true; |
| 1379 page()->contextMenuController().clearContextMenu(); | 1379 page()->contextMenuController().clearContextMenu(); |
| 1380 page()->contextMenuController().showContextMenuAtPoint(page()->deprecatedLoc
alMainFrame(), x, y, menuProvider); | 1380 page()->contextMenuController().showContextMenuAtPoint(page()->deprecatedLoc
alMainFrame(), x, y, menuProvider); |
| 1381 m_contextMenuAllowed = false; | 1381 m_contextMenuAllowed = false; |
| 1382 } | 1382 } |
| 1383 | 1383 |
| 1384 bool WebViewImpl::keyEventDefault(const WebKeyboardEvent& event) | 1384 bool WebViewImpl::keyEventDefault(const WebKeyboardEvent& event) |
| 1385 { | 1385 { |
| 1386 LocalFrame* frame = toLocalFrame(focusedWebCoreFrame()); | 1386 LocalFrame* frame = toLocalFrame(focusedCoreFrame()); |
| 1387 if (!frame) | 1387 if (!frame) |
| 1388 return false; | 1388 return false; |
| 1389 | 1389 |
| 1390 switch (event.type) { | 1390 switch (event.type) { |
| 1391 case WebInputEvent::Char: | 1391 case WebInputEvent::Char: |
| 1392 if (event.windowsKeyCode == VKEY_SPACE) { | 1392 if (event.windowsKeyCode == VKEY_SPACE) { |
| 1393 int keyCode = ((event.modifiers & WebInputEvent::ShiftKey) ? VKEY_PR
IOR : VKEY_NEXT); | 1393 int keyCode = ((event.modifiers & WebInputEvent::ShiftKey) ? VKEY_PR
IOR : VKEY_NEXT); |
| 1394 return scrollViewWithKeyboard(keyCode, event.modifiers); | 1394 return scrollViewWithKeyboard(keyCode, event.modifiers); |
| 1395 } | 1395 } |
| 1396 break; | 1396 break; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1435 if (modifiers & WebMouseEvent::ControlKey) { | 1435 if (modifiers & WebMouseEvent::ControlKey) { |
| 1436 if (keyCode == VKEY_UP) | 1436 if (keyCode == VKEY_UP) |
| 1437 keyCode = VKEY_PRIOR; | 1437 keyCode = VKEY_PRIOR; |
| 1438 else if (keyCode == VKEY_DOWN) | 1438 else if (keyCode == VKEY_DOWN) |
| 1439 keyCode = VKEY_NEXT; | 1439 keyCode = VKEY_NEXT; |
| 1440 } | 1440 } |
| 1441 #endif | 1441 #endif |
| 1442 if (!mapKeyCodeForScroll(keyCode, &scrollDirection, &scrollGranularity)) | 1442 if (!mapKeyCodeForScroll(keyCode, &scrollDirection, &scrollGranularity)) |
| 1443 return false; | 1443 return false; |
| 1444 | 1444 |
| 1445 LocalFrame* frame = toLocalFrame(focusedWebCoreFrame()); | 1445 if (LocalFrame* frame = toLocalFrame(focusedCoreFrame())) |
| 1446 if (!frame) | 1446 return frame->eventHandler().bubblingScroll(scrollDirection, scrollGranu
larity); |
| 1447 return false; | 1447 return false; |
| 1448 return frame->eventHandler().bubblingScroll(scrollDirection, scrollGranulari
ty); | |
| 1449 } | 1448 } |
| 1450 | 1449 |
| 1451 bool WebViewImpl::mapKeyCodeForScroll( | 1450 bool WebViewImpl::mapKeyCodeForScroll( |
| 1452 int keyCode, | 1451 int keyCode, |
| 1453 ScrollDirection* scrollDirection, | 1452 ScrollDirection* scrollDirection, |
| 1454 ScrollGranularity* scrollGranularity) | 1453 ScrollGranularity* scrollGranularity) |
| 1455 { | 1454 { |
| 1456 switch (keyCode) { | 1455 switch (keyCode) { |
| 1457 case VKEY_LEFT: | 1456 case VKEY_LEFT: |
| 1458 *scrollDirection = ScrollLeft; | 1457 *scrollDirection = ScrollLeft; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1542 { | 1541 { |
| 1543 ASSERT(popup); | 1542 ASSERT(popup); |
| 1544 WebPagePopupImpl* popupImpl = toWebPagePopupImpl(popup); | 1543 WebPagePopupImpl* popupImpl = toWebPagePopupImpl(popup); |
| 1545 ASSERT(m_pagePopup.get() == popupImpl); | 1544 ASSERT(m_pagePopup.get() == popupImpl); |
| 1546 if (m_pagePopup.get() != popupImpl) | 1545 if (m_pagePopup.get() != popupImpl) |
| 1547 return; | 1546 return; |
| 1548 m_pagePopup->closePopup(); | 1547 m_pagePopup->closePopup(); |
| 1549 m_pagePopup = nullptr; | 1548 m_pagePopup = nullptr; |
| 1550 } | 1549 } |
| 1551 | 1550 |
| 1552 Frame* WebViewImpl::focusedWebCoreFrame() const | 1551 Frame* WebViewImpl::focusedCoreFrame() const |
| 1553 { | 1552 { |
| 1554 return m_page ? m_page->focusController().focusedOrMainFrame() : 0; | 1553 return m_page ? m_page->focusController().focusedOrMainFrame() : 0; |
| 1555 } | 1554 } |
| 1556 | 1555 |
| 1557 WebViewImpl* WebViewImpl::fromPage(Page* page) | 1556 WebViewImpl* WebViewImpl::fromPage(Page* page) |
| 1558 { | 1557 { |
| 1559 if (!page) | 1558 if (!page) |
| 1560 return 0; | 1559 return 0; |
| 1561 return static_cast<WebViewImpl*>(page->chrome().client().webView()); | 1560 return static_cast<WebViewImpl*>(page->chrome().client().webView()); |
| 1562 } | 1561 } |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2057 } | 2056 } |
| 2058 } | 2057 } |
| 2059 } | 2058 } |
| 2060 | 2059 |
| 2061 bool WebViewImpl::setComposition( | 2060 bool WebViewImpl::setComposition( |
| 2062 const WebString& text, | 2061 const WebString& text, |
| 2063 const WebVector<WebCompositionUnderline>& underlines, | 2062 const WebVector<WebCompositionUnderline>& underlines, |
| 2064 int selectionStart, | 2063 int selectionStart, |
| 2065 int selectionEnd) | 2064 int selectionEnd) |
| 2066 { | 2065 { |
| 2067 LocalFrame* focused = toLocalFrame(focusedWebCoreFrame()); | 2066 LocalFrame* focused = toLocalFrame(focusedCoreFrame()); |
| 2068 if (!focused || !m_imeAcceptEvents) | 2067 if (!focused || !m_imeAcceptEvents) |
| 2069 return false; | 2068 return false; |
| 2070 | 2069 |
| 2071 if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused)) | 2070 if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused)) |
| 2072 return plugin->setComposition(text, underlines, selectionStart, selectio
nEnd); | 2071 return plugin->setComposition(text, underlines, selectionStart, selectio
nEnd); |
| 2073 | 2072 |
| 2074 // The input focus has been moved to another WebWidget object. | 2073 // The input focus has been moved to another WebWidget object. |
| 2075 // We should use this |editor| object only to complete the ongoing | 2074 // We should use this |editor| object only to complete the ongoing |
| 2076 // composition. | 2075 // composition. |
| 2077 InputMethodController& inputMethodController = focused->inputMethodControlle
r(); | 2076 InputMethodController& inputMethodController = focused->inputMethodControlle
r(); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2123 return confirmComposition(WebString(), selectionBehavior); | 2122 return confirmComposition(WebString(), selectionBehavior); |
| 2124 } | 2123 } |
| 2125 | 2124 |
| 2126 bool WebViewImpl::confirmComposition(const WebString& text) | 2125 bool WebViewImpl::confirmComposition(const WebString& text) |
| 2127 { | 2126 { |
| 2128 return confirmComposition(text, DoNotKeepSelection); | 2127 return confirmComposition(text, DoNotKeepSelection); |
| 2129 } | 2128 } |
| 2130 | 2129 |
| 2131 bool WebViewImpl::confirmComposition(const WebString& text, ConfirmCompositionBe
havior selectionBehavior) | 2130 bool WebViewImpl::confirmComposition(const WebString& text, ConfirmCompositionBe
havior selectionBehavior) |
| 2132 { | 2131 { |
| 2133 LocalFrame* focused = toLocalFrame(focusedWebCoreFrame()); | 2132 LocalFrame* focused = toLocalFrame(focusedCoreFrame()); |
| 2134 if (!focused || !m_imeAcceptEvents) | 2133 if (!focused || !m_imeAcceptEvents) |
| 2135 return false; | 2134 return false; |
| 2136 | 2135 |
| 2137 if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused)) | 2136 if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused)) |
| 2138 return plugin->confirmComposition(text, selectionBehavior); | 2137 return plugin->confirmComposition(text, selectionBehavior); |
| 2139 | 2138 |
| 2140 return focused->inputMethodController().confirmCompositionOrInsertText(text,
selectionBehavior == KeepSelection ? InputMethodController::KeepSelection : Inp
utMethodController::DoNotKeepSelection); | 2139 return focused->inputMethodController().confirmCompositionOrInsertText(text,
selectionBehavior == KeepSelection ? InputMethodController::KeepSelection : Inp
utMethodController::DoNotKeepSelection); |
| 2141 } | 2140 } |
| 2142 | 2141 |
| 2143 bool WebViewImpl::compositionRange(size_t* location, size_t* length) | 2142 bool WebViewImpl::compositionRange(size_t* location, size_t* length) |
| 2144 { | 2143 { |
| 2145 LocalFrame* focused = toLocalFrame(focusedWebCoreFrame()); | 2144 LocalFrame* focused = toLocalFrame(focusedCoreFrame()); |
| 2146 if (!focused || !m_imeAcceptEvents) | 2145 if (!focused || !m_imeAcceptEvents) |
| 2147 return false; | 2146 return false; |
| 2148 | 2147 |
| 2149 RefPtrWillBeRawPtr<Range> range = focused->inputMethodController().compositi
onRange(); | 2148 RefPtrWillBeRawPtr<Range> range = focused->inputMethodController().compositi
onRange(); |
| 2150 if (!range) | 2149 if (!range) |
| 2151 return false; | 2150 return false; |
| 2152 | 2151 |
| 2153 Element* editable = focused->selection().rootEditableElementOrDocumentElemen
t(); | 2152 Element* editable = focused->selection().rootEditableElementOrDocumentElemen
t(); |
| 2154 ASSERT(editable); | 2153 ASSERT(editable); |
| 2155 PlainTextRange plainTextRange(PlainTextRange::create(*editable, *range.get()
)); | 2154 PlainTextRange plainTextRange(PlainTextRange::create(*editable, *range.get()
)); |
| 2156 if (plainTextRange.isNull()) | 2155 if (plainTextRange.isNull()) |
| 2157 return false; | 2156 return false; |
| 2158 *location = plainTextRange.start(); | 2157 *location = plainTextRange.start(); |
| 2159 *length = plainTextRange.length(); | 2158 *length = plainTextRange.length(); |
| 2160 return true; | 2159 return true; |
| 2161 } | 2160 } |
| 2162 | 2161 |
| 2163 WebTextInputInfo WebViewImpl::textInputInfo() | 2162 WebTextInputInfo WebViewImpl::textInputInfo() |
| 2164 { | 2163 { |
| 2165 WebTextInputInfo info; | 2164 WebTextInputInfo info; |
| 2166 | 2165 |
| 2167 Frame* focusedFrame = focusedWebCoreFrame(); | 2166 Frame* focusedFrame = focusedCoreFrame(); |
| 2168 if (!focusedFrame->isLocalFrame()) | 2167 if (!focusedFrame->isLocalFrame()) |
| 2169 return info; | 2168 return info; |
| 2170 | 2169 |
| 2171 LocalFrame* focused = toLocalFrame(focusedFrame); | 2170 LocalFrame* focused = toLocalFrame(focusedFrame); |
| 2172 if (!focused) | 2171 if (!focused) |
| 2173 return info; | 2172 return info; |
| 2174 | 2173 |
| 2175 FrameSelection& selection = focused->selection(); | 2174 FrameSelection& selection = focused->selection(); |
| 2176 Element* element = selection.selection().rootEditableElement(); | 2175 Element* element = selection.selection().rootEditableElement(); |
| 2177 if (!element) | 2176 if (!element) |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2319 if (isHTMLTextAreaElement(*element)) { | 2318 if (isHTMLTextAreaElement(*element)) { |
| 2320 const HTMLTextAreaElement& textarea = toHTMLTextAreaElement(*element); | 2319 const HTMLTextAreaElement& textarea = toHTMLTextAreaElement(*element); |
| 2321 return textarea.fastGetAttribute(HTMLNames::inputmodeAttr).lower(); | 2320 return textarea.fastGetAttribute(HTMLNames::inputmodeAttr).lower(); |
| 2322 } | 2321 } |
| 2323 | 2322 |
| 2324 return WebString(); | 2323 return WebString(); |
| 2325 } | 2324 } |
| 2326 | 2325 |
| 2327 bool WebViewImpl::selectionBounds(WebRect& anchor, WebRect& focus) const | 2326 bool WebViewImpl::selectionBounds(WebRect& anchor, WebRect& focus) const |
| 2328 { | 2327 { |
| 2329 const Frame* frame = focusedWebCoreFrame(); | 2328 const Frame* frame = focusedCoreFrame(); |
| 2330 if (!frame || !frame->isLocalFrame()) | 2329 if (!frame || !frame->isLocalFrame()) |
| 2331 return false; | 2330 return false; |
| 2332 | 2331 |
| 2333 const LocalFrame* localFrame = toLocalFrame(frame); | 2332 const LocalFrame* localFrame = toLocalFrame(frame); |
| 2334 if (!localFrame) | 2333 if (!localFrame) |
| 2335 return false; | 2334 return false; |
| 2336 FrameSelection& selection = localFrame->selection(); | 2335 FrameSelection& selection = localFrame->selection(); |
| 2337 | 2336 |
| 2338 if (selection.isCaret()) { | 2337 if (selection.isCaret()) { |
| 2339 anchor = focus = selection.absoluteCaretBounds(); | 2338 anchor = focus = selection.absoluteCaretBounds(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2378 if (!selection.selection().isBaseFirst()) | 2377 if (!selection.selection().isBaseFirst()) |
| 2379 std::swap(anchor, focus); | 2378 std::swap(anchor, focus); |
| 2380 return true; | 2379 return true; |
| 2381 } | 2380 } |
| 2382 | 2381 |
| 2383 InputMethodContext* WebViewImpl::inputMethodContext() | 2382 InputMethodContext* WebViewImpl::inputMethodContext() |
| 2384 { | 2383 { |
| 2385 if (!m_imeAcceptEvents) | 2384 if (!m_imeAcceptEvents) |
| 2386 return 0; | 2385 return 0; |
| 2387 | 2386 |
| 2388 LocalFrame* focusedFrame = toLocalFrame(focusedWebCoreFrame()); | 2387 LocalFrame* focusedFrame = toLocalFrame(focusedCoreFrame()); |
| 2389 if (!focusedFrame) | 2388 if (!focusedFrame) |
| 2390 return 0; | 2389 return 0; |
| 2391 | 2390 |
| 2392 Element* target = focusedFrame->document()->focusedElement(); | 2391 Element* target = focusedFrame->document()->focusedElement(); |
| 2393 if (target && target->hasInputMethodContext()) | 2392 if (target && target->hasInputMethodContext()) |
| 2394 return &target->inputMethodContext(); | 2393 return &target->inputMethodContext(); |
| 2395 | 2394 |
| 2396 return 0; | 2395 return 0; |
| 2397 } | 2396 } |
| 2398 | 2397 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2417 } | 2416 } |
| 2418 | 2417 |
| 2419 void WebViewImpl::didHideCandidateWindow() | 2418 void WebViewImpl::didHideCandidateWindow() |
| 2420 { | 2419 { |
| 2421 if (InputMethodContext* context = inputMethodContext()) | 2420 if (InputMethodContext* context = inputMethodContext()) |
| 2422 context->dispatchCandidateWindowHideEvent(); | 2421 context->dispatchCandidateWindowHideEvent(); |
| 2423 } | 2422 } |
| 2424 | 2423 |
| 2425 bool WebViewImpl::selectionTextDirection(WebTextDirection& start, WebTextDirecti
on& end) const | 2424 bool WebViewImpl::selectionTextDirection(WebTextDirection& start, WebTextDirecti
on& end) const |
| 2426 { | 2425 { |
| 2427 const LocalFrame* frame = toLocalFrame(focusedWebCoreFrame()); | 2426 const LocalFrame* frame = toLocalFrame(focusedCoreFrame()); |
| 2428 if (!frame) | 2427 if (!frame) |
| 2429 return false; | 2428 return false; |
| 2430 FrameSelection& selection = frame->selection(); | 2429 FrameSelection& selection = frame->selection(); |
| 2431 if (!selection.toNormalizedRange()) | 2430 if (!selection.toNormalizedRange()) |
| 2432 return false; | 2431 return false; |
| 2433 start = toWebTextDirection(selection.start().primaryDirection()); | 2432 start = toWebTextDirection(selection.start().primaryDirection()); |
| 2434 end = toWebTextDirection(selection.end().primaryDirection()); | 2433 end = toWebTextDirection(selection.end().primaryDirection()); |
| 2435 return true; | 2434 return true; |
| 2436 } | 2435 } |
| 2437 | 2436 |
| 2438 bool WebViewImpl::isSelectionAnchorFirst() const | 2437 bool WebViewImpl::isSelectionAnchorFirst() const |
| 2439 { | 2438 { |
| 2440 if (const LocalFrame* frame = toLocalFrame(focusedWebCoreFrame())) | 2439 if (const LocalFrame* frame = toLocalFrame(focusedCoreFrame())) |
| 2441 return frame->selection().selection().isBaseFirst(); | 2440 return frame->selection().selection().isBaseFirst(); |
| 2442 return false; | 2441 return false; |
| 2443 } | 2442 } |
| 2444 | 2443 |
| 2445 WebVector<WebCompositionUnderline> WebViewImpl::compositionUnderlines() const | 2444 WebVector<WebCompositionUnderline> WebViewImpl::compositionUnderlines() const |
| 2446 { | 2445 { |
| 2447 const LocalFrame* focused = toLocalFrame(focusedWebCoreFrame()); | 2446 const LocalFrame* focused = toLocalFrame(focusedCoreFrame()); |
| 2448 if (!focused) | 2447 if (!focused) |
| 2449 return WebVector<WebCompositionUnderline>(); | 2448 return WebVector<WebCompositionUnderline>(); |
| 2450 const Vector<CompositionUnderline>& underlines = focused->inputMethodControl
ler().customCompositionUnderlines(); | 2449 const Vector<CompositionUnderline>& underlines = focused->inputMethodControl
ler().customCompositionUnderlines(); |
| 2451 WebVector<WebCompositionUnderline> results(underlines.size()); | 2450 WebVector<WebCompositionUnderline> results(underlines.size()); |
| 2452 for (size_t index = 0; index < underlines.size(); ++index) { | 2451 for (size_t index = 0; index < underlines.size(); ++index) { |
| 2453 CompositionUnderline underline = underlines[index]; | 2452 CompositionUnderline underline = underlines[index]; |
| 2454 results[index] = WebCompositionUnderline(underline.startOffset, underlin
e.endOffset, static_cast<WebColor>(underline.color.rgb()), underline.thick, stat
ic_cast<WebColor>(underline.backgroundColor.rgb())); | 2453 results[index] = WebCompositionUnderline(underline.startOffset, underlin
e.endOffset, static_cast<WebColor>(underline.color.rgb()), underline.thick, stat
ic_cast<WebColor>(underline.backgroundColor.rgb())); |
| 2455 } | 2454 } |
| 2456 return results; | 2455 return results; |
| 2457 } | 2456 } |
| 2458 | 2457 |
| 2459 WebColor WebViewImpl::backgroundColor() const | 2458 WebColor WebViewImpl::backgroundColor() const |
| 2460 { | 2459 { |
| 2461 if (isTransparent()) | 2460 if (isTransparent()) |
| 2462 return Color::transparent; | 2461 return Color::transparent; |
| 2463 if (!m_page) | 2462 if (!m_page) |
| 2464 return m_baseBackgroundColor; | 2463 return m_baseBackgroundColor; |
| 2465 if (!m_page->mainFrame()) | 2464 if (!m_page->mainFrame()) |
| 2466 return m_baseBackgroundColor; | 2465 return m_baseBackgroundColor; |
| 2467 if (!m_page->mainFrame()->isLocalFrame()) | 2466 if (!m_page->mainFrame()->isLocalFrame()) |
| 2468 return m_baseBackgroundColor; | 2467 return m_baseBackgroundColor; |
| 2469 FrameView* view = m_page->deprecatedLocalMainFrame()->view(); | 2468 FrameView* view = m_page->deprecatedLocalMainFrame()->view(); |
| 2470 return view->documentBackgroundColor().rgb(); | 2469 return view->documentBackgroundColor().rgb(); |
| 2471 } | 2470 } |
| 2472 | 2471 |
| 2473 bool WebViewImpl::caretOrSelectionRange(size_t* location, size_t* length) | 2472 bool WebViewImpl::caretOrSelectionRange(size_t* location, size_t* length) |
| 2474 { | 2473 { |
| 2475 const LocalFrame* focused = toLocalFrame(focusedWebCoreFrame()); | 2474 const LocalFrame* focused = toLocalFrame(focusedCoreFrame()); |
| 2476 if (!focused) | 2475 if (!focused) |
| 2477 return false; | 2476 return false; |
| 2478 | 2477 |
| 2479 PlainTextRange selectionOffsets = focused->inputMethodController().getSelect
ionOffsets(); | 2478 PlainTextRange selectionOffsets = focused->inputMethodController().getSelect
ionOffsets(); |
| 2480 if (selectionOffsets.isNull()) | 2479 if (selectionOffsets.isNull()) |
| 2481 return false; | 2480 return false; |
| 2482 | 2481 |
| 2483 *location = selectionOffsets.start(); | 2482 *location = selectionOffsets.start(); |
| 2484 *length = selectionOffsets.length(); | 2483 *length = selectionOffsets.length(); |
| 2485 return true; | 2484 return true; |
| 2486 } | 2485 } |
| 2487 | 2486 |
| 2488 void WebViewImpl::setTextDirection(WebTextDirection direction) | 2487 void WebViewImpl::setTextDirection(WebTextDirection direction) |
| 2489 { | 2488 { |
| 2490 // The Editor::setBaseWritingDirection() function checks if we can change | 2489 // The Editor::setBaseWritingDirection() function checks if we can change |
| 2491 // the text direction of the selected node and updates its DOM "dir" | 2490 // the text direction of the selected node and updates its DOM "dir" |
| 2492 // attribute and its CSS "direction" property. | 2491 // attribute and its CSS "direction" property. |
| 2493 // So, we just call the function as Safari does. | 2492 // So, we just call the function as Safari does. |
| 2494 const LocalFrame* focused = toLocalFrame(focusedWebCoreFrame()); | 2493 const LocalFrame* focused = toLocalFrame(focusedCoreFrame()); |
| 2495 if (!focused) | 2494 if (!focused) |
| 2496 return; | 2495 return; |
| 2497 | 2496 |
| 2498 Editor& editor = focused->editor(); | 2497 Editor& editor = focused->editor(); |
| 2499 if (!editor.canEdit()) | 2498 if (!editor.canEdit()) |
| 2500 return; | 2499 return; |
| 2501 | 2500 |
| 2502 switch (direction) { | 2501 switch (direction) { |
| 2503 case WebTextDirectionDefault: | 2502 case WebTextDirectionDefault: |
| 2504 editor.setBaseWritingDirection(NaturalWritingDirection); | 2503 editor.setBaseWritingDirection(NaturalWritingDirection); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2613 relativeToFrame = mainFrame(); | 2612 relativeToFrame = mainFrame(); |
| 2614 Frame* frame = toWebLocalFrameImpl(relativeToFrame)->frame(); | 2613 Frame* frame = toWebLocalFrameImpl(relativeToFrame)->frame(); |
| 2615 frame = frame->tree().find(name); | 2614 frame = frame->tree().find(name); |
| 2616 if (!frame || !frame->isLocalFrame()) | 2615 if (!frame || !frame->isLocalFrame()) |
| 2617 return 0; | 2616 return 0; |
| 2618 return WebLocalFrameImpl::fromFrame(toLocalFrame(frame)); | 2617 return WebLocalFrameImpl::fromFrame(toLocalFrame(frame)); |
| 2619 } | 2618 } |
| 2620 | 2619 |
| 2621 WebFrame* WebViewImpl::focusedFrame() | 2620 WebFrame* WebViewImpl::focusedFrame() |
| 2622 { | 2621 { |
| 2623 return WebFrame::fromFrame(focusedWebCoreFrame()); | 2622 return WebFrame::fromFrame(focusedCoreFrame()); |
| 2624 } | 2623 } |
| 2625 | 2624 |
| 2626 void WebViewImpl::setFocusedFrame(WebFrame* frame) | 2625 void WebViewImpl::setFocusedFrame(WebFrame* frame) |
| 2627 { | 2626 { |
| 2628 if (!frame) { | 2627 if (!frame) { |
| 2629 // Clears the focused frame if any. | 2628 // Clears the focused frame if any. |
| 2630 Frame* focusedFrame = focusedWebCoreFrame(); | 2629 Frame* focusedFrame = focusedCoreFrame(); |
| 2631 if (focusedFrame && focusedFrame->isLocalFrame()) | 2630 if (focusedFrame && focusedFrame->isLocalFrame()) |
| 2632 toLocalFrame(focusedFrame)->selection().setFocused(false); | 2631 toLocalFrame(focusedFrame)->selection().setFocused(false); |
| 2633 return; | 2632 return; |
| 2634 } | 2633 } |
| 2635 LocalFrame* webcoreFrame = toWebLocalFrameImpl(frame)->frame(); | 2634 LocalFrame* coreFrame = toWebLocalFrameImpl(frame)->frame(); |
| 2636 webcoreFrame->page()->focusController().setFocusedFrame(webcoreFrame); | 2635 coreFrame->page()->focusController().setFocusedFrame(coreFrame); |
| 2637 } | 2636 } |
| 2638 | 2637 |
| 2639 void WebViewImpl::setInitialFocus(bool reverse) | 2638 void WebViewImpl::setInitialFocus(bool reverse) |
| 2640 { | 2639 { |
| 2641 if (!m_page) | 2640 if (!m_page) |
| 2642 return; | 2641 return; |
| 2643 Frame* frame = page()->focusController().focusedOrMainFrame(); | 2642 Frame* frame = page()->focusController().focusedOrMainFrame(); |
| 2644 if (frame->isLocalFrame()) { | 2643 if (frame->isLocalFrame()) { |
| 2645 if (Document* document = toLocalFrame(frame)->document()) | 2644 if (Document* document = toLocalFrame(frame)->document()) |
| 2646 document->setFocusedElement(nullptr); | 2645 document->setFocusedElement(nullptr); |
| 2647 } | 2646 } |
| 2648 page()->focusController().setInitialFocus(reverse ? FocusTypeBackward : Focu
sTypeForward); | 2647 page()->focusController().setInitialFocus(reverse ? FocusTypeBackward : Focu
sTypeForward); |
| 2649 } | 2648 } |
| 2650 | 2649 |
| 2651 void WebViewImpl::clearFocusedElement() | 2650 void WebViewImpl::clearFocusedElement() |
| 2652 { | 2651 { |
| 2653 RefPtr<Frame> frame = focusedWebCoreFrame(); | 2652 RefPtr<Frame> frame = focusedCoreFrame(); |
| 2654 if (!frame || !frame->isLocalFrame()) | 2653 if (!frame || !frame->isLocalFrame()) |
| 2655 return; | 2654 return; |
| 2656 | 2655 |
| 2657 LocalFrame* localFrame = toLocalFrame(frame.get()); | 2656 LocalFrame* localFrame = toLocalFrame(frame.get()); |
| 2658 | 2657 |
| 2659 RefPtrWillBeRawPtr<Document> document = localFrame->document(); | 2658 RefPtrWillBeRawPtr<Document> document = localFrame->document(); |
| 2660 if (!document) | 2659 if (!document) |
| 2661 return; | 2660 return; |
| 2662 | 2661 |
| 2663 RefPtrWillBeRawPtr<Element> oldFocusedElement = document->focusedElement(); | 2662 RefPtrWillBeRawPtr<Element> oldFocusedElement = document->focusedElement(); |
| (...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3564 | 3563 |
| 3565 page()->contextMenuController().clearContextMenu(); | 3564 page()->contextMenuController().clearContextMenu(); |
| 3566 m_contextMenuAllowed = true; | 3565 m_contextMenuAllowed = true; |
| 3567 if (LocalFrame* focusedFrame = toLocalFrame(page()->focusController().focuse
dOrMainFrame())) | 3566 if (LocalFrame* focusedFrame = toLocalFrame(page()->focusController().focuse
dOrMainFrame())) |
| 3568 focusedFrame->eventHandler().sendContextMenuEventForKey(); | 3567 focusedFrame->eventHandler().sendContextMenuEventForKey(); |
| 3569 m_contextMenuAllowed = false; | 3568 m_contextMenuAllowed = false; |
| 3570 } | 3569 } |
| 3571 | 3570 |
| 3572 void WebViewImpl::extractSmartClipData(WebRect rect, WebString& clipText, WebStr
ing& clipHtml, WebRect& clipRect) | 3571 void WebViewImpl::extractSmartClipData(WebRect rect, WebString& clipText, WebStr
ing& clipHtml, WebRect& clipRect) |
| 3573 { | 3572 { |
| 3574 LocalFrame* localFrame = toLocalFrame(focusedWebCoreFrame()); | 3573 LocalFrame* localFrame = toLocalFrame(focusedCoreFrame()); |
| 3575 if (!localFrame) | 3574 if (!localFrame) |
| 3576 return; | 3575 return; |
| 3577 SmartClipData clipData = SmartClip(localFrame).dataForRect(rect); | 3576 SmartClipData clipData = SmartClip(localFrame).dataForRect(rect); |
| 3578 clipText = clipData.clipData(); | 3577 clipText = clipData.clipData(); |
| 3579 clipRect = clipData.rect(); | 3578 clipRect = clipData.rect(); |
| 3580 | 3579 |
| 3581 WebLocalFrameImpl* frame = mainFrameImpl(); | 3580 WebLocalFrameImpl* frame = mainFrameImpl(); |
| 3582 if (!frame) | 3581 if (!frame) |
| 3583 return; | 3582 return; |
| 3584 WebPoint startPoint(rect.x, rect.y); | 3583 WebPoint startPoint(rect.x, rect.y); |
| (...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4258 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi
nedConstraints(); | 4257 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi
nedConstraints(); |
| 4259 | 4258 |
| 4260 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) | 4259 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) |
| 4261 return false; | 4260 return false; |
| 4262 | 4261 |
| 4263 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width | 4262 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width |
| 4264 || (constraints.minimumScale == constraints.maximumScale && constraints.
minimumScale != -1); | 4263 || (constraints.minimumScale == constraints.maximumScale && constraints.
minimumScale != -1); |
| 4265 } | 4264 } |
| 4266 | 4265 |
| 4267 } // namespace blink | 4266 } // namespace blink |
| OLD | NEW |