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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 // Change the text zoom level by kTextSizeMultiplierRatio each time the user | 203 // Change the text zoom level by kTextSizeMultiplierRatio each time the user |
204 // zooms text in or out (ie., change by 20%). The min and max values limit | 204 // zooms text in or out (ie., change by 20%). The min and max values limit |
205 // text zoom to half and 3x the original text size. These three values match | 205 // text zoom to half and 3x the original text size. These three values match |
206 // those in Apple's port in WebKit/WebKit/WebView/WebView.mm | 206 // those in Apple's port in WebKit/WebKit/WebView/WebView.mm |
207 const double WebView::textSizeMultiplierRatio = 1.2; | 207 const double WebView::textSizeMultiplierRatio = 1.2; |
208 const double WebView::minTextSizeMultiplier = 0.5; | 208 const double WebView::minTextSizeMultiplier = 0.5; |
209 const double WebView::maxTextSizeMultiplier = 3.0; | 209 const double WebView::maxTextSizeMultiplier = 3.0; |
210 | 210 |
211 // Used to defer all page activity in cases where the embedder wishes to run | 211 // Used to defer all page activity in cases where the embedder wishes to run |
212 // a nested event loop. Using a stack enables nesting of message loop invocation
s. | 212 // a nested event loop. Using a stack enables nesting of message loop invocation
s. |
213 static Vector<ScopedPageLoadDeferrer*>& pageLoadDeferrerStack() | 213 static WillBeHeapVector<RawPtrWillBeMember<ScopedPageLoadDeferrer> >& pageLoadDe
ferrerStack() |
214 { | 214 { |
215 DEFINE_STATIC_LOCAL(Vector<ScopedPageLoadDeferrer*>, deferrerStack, ()); | 215 DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<WillBeHeapVector<RawPtrWillBeMemb
er<ScopedPageLoadDeferrer> > >, deferrerStack, (adoptPtrWillBeNoop(new WillBeHea
pVector<RawPtrWillBeMember<ScopedPageLoadDeferrer> > ()))); |
216 return deferrerStack; | 216 return *deferrerStack; |
217 } | 217 } |
218 | 218 |
219 // Ensure that the WebDragOperation enum values stay in sync with the original | 219 // Ensure that the WebDragOperation enum values stay in sync with the original |
220 // DragOperation constants. | 220 // DragOperation constants. |
221 #define COMPILE_ASSERT_MATCHING_ENUM(coreName) \ | 221 #define COMPILE_ASSERT_MATCHING_ENUM(coreName) \ |
222 COMPILE_ASSERT(int(coreName) == int(Web##coreName), dummy##coreName) | 222 COMPILE_ASSERT(int(coreName) == int(Web##coreName), dummy##coreName) |
223 COMPILE_ASSERT_MATCHING_ENUM(DragOperationNone); | 223 COMPILE_ASSERT_MATCHING_ENUM(DragOperationNone); |
224 COMPILE_ASSERT_MATCHING_ENUM(DragOperationCopy); | 224 COMPILE_ASSERT_MATCHING_ENUM(DragOperationCopy); |
225 COMPILE_ASSERT_MATCHING_ENUM(DragOperationLink); | 225 COMPILE_ASSERT_MATCHING_ENUM(DragOperationLink); |
226 COMPILE_ASSERT_MATCHING_ENUM(DragOperationGeneric); | 226 COMPILE_ASSERT_MATCHING_ENUM(DragOperationGeneric); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 | 309 |
310 void WebView::willEnterModalLoop() | 310 void WebView::willEnterModalLoop() |
311 { | 311 { |
312 pageLoadDeferrerStack().append(new ScopedPageLoadDeferrer()); | 312 pageLoadDeferrerStack().append(new ScopedPageLoadDeferrer()); |
313 } | 313 } |
314 | 314 |
315 void WebView::didExitModalLoop() | 315 void WebView::didExitModalLoop() |
316 { | 316 { |
317 ASSERT(pageLoadDeferrerStack().size()); | 317 ASSERT(pageLoadDeferrerStack().size()); |
318 | 318 |
319 delete pageLoadDeferrerStack().last(); | 319 ScopedPageLoadDeferrer* deferrer = pageLoadDeferrerStack().last(); |
| 320 #if ENABLE(OILPAN) |
| 321 deferrer->dispose(); |
| 322 #else |
| 323 delete deferrer; |
| 324 #endif |
320 pageLoadDeferrerStack().removeLast(); | 325 pageLoadDeferrerStack().removeLast(); |
321 } | 326 } |
322 | 327 |
323 void WebViewImpl::setMainFrame(WebFrame* frame) | 328 void WebViewImpl::setMainFrame(WebFrame* frame) |
324 { | 329 { |
325 if (frame->isWebLocalFrame()) | 330 if (frame->isWebLocalFrame()) { |
| 331 #if ENABLE(OILPAN) |
| 332 m_localMainFrame = toWebLocalFrameImpl(frame); |
| 333 m_remoteMainFrame.clear(); |
| 334 #endif |
326 toWebLocalFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0,
nullAtom, nullAtom); | 335 toWebLocalFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0,
nullAtom, nullAtom); |
327 else | 336 } else { |
| 337 #if ENABLE(OILPAN) |
| 338 m_localMainFrame.clear(); |
| 339 m_remoteMainFrame = toWebRemoteFrameImpl(frame); |
| 340 #endif |
328 toWebRemoteFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0
, nullAtom); | 341 toWebRemoteFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0
, nullAtom); |
| 342 } |
329 } | 343 } |
330 | 344 |
331 void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient) | 345 void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient) |
332 { | 346 { |
333 m_autofillClient = autofillClient; | 347 m_autofillClient = autofillClient; |
334 } | 348 } |
335 | 349 |
336 void WebViewImpl::setCredentialManagerClient(WebCredentialManagerClient* webCred
entialManagerClient) | 350 void WebViewImpl::setCredentialManagerClient(WebCredentialManagerClient* webCred
entialManagerClient) |
337 { | 351 { |
338 ASSERT(m_page); | 352 ASSERT(m_page); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 setDeviceScaleFactor(m_client->screenInfo().deviceScaleFactor); | 461 setDeviceScaleFactor(m_client->screenInfo().deviceScaleFactor); |
448 setVisibilityState(m_client->visibilityState(), true); | 462 setVisibilityState(m_client->visibilityState(), true); |
449 } | 463 } |
450 | 464 |
451 initializeLayerTreeView(); | 465 initializeLayerTreeView(); |
452 } | 466 } |
453 | 467 |
454 WebViewImpl::~WebViewImpl() | 468 WebViewImpl::~WebViewImpl() |
455 { | 469 { |
456 ASSERT(!m_page); | 470 ASSERT(!m_page); |
| 471 #if ENABLE(OILPAN) |
| 472 // At most one Persistent frame reference should be set. |
| 473 ASSERT(!(m_localMainFrame && m_remoteMainFrame)); |
| 474 #endif |
457 } | 475 } |
458 | 476 |
459 WebLocalFrameImpl* WebViewImpl::mainFrameImpl() | 477 WebLocalFrameImpl* WebViewImpl::mainFrameImpl() |
460 { | 478 { |
461 return m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame()
? WebLocalFrameImpl::fromFrame(m_page->deprecatedLocalMainFrame()) : 0; | 479 return m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame()
? WebLocalFrameImpl::fromFrame(m_page->deprecatedLocalMainFrame()) : 0; |
462 } | 480 } |
463 | 481 |
464 bool WebViewImpl::tabKeyCyclesThroughElements() const | 482 bool WebViewImpl::tabKeyCyclesThroughElements() const |
465 { | 483 { |
466 ASSERT(m_page); | 484 ASSERT(m_page); |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
948 return m_selectPopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)
); | 966 return m_selectPopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)
); |
949 if (m_pagePopup) { | 967 if (m_pagePopup) { |
950 m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); | 968 m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); |
951 // We need to ignore the next Char event after this otherwise pressing | 969 // We need to ignore the next Char event after this otherwise pressing |
952 // enter when selecting an item in the popup will go to the page. | 970 // enter when selecting an item in the popup will go to the page. |
953 if (WebInputEvent::RawKeyDown == event.type) | 971 if (WebInputEvent::RawKeyDown == event.type) |
954 m_suppressNextKeypressEvent = true; | 972 m_suppressNextKeypressEvent = true; |
955 return true; | 973 return true; |
956 } | 974 } |
957 | 975 |
958 RefPtr<Frame> focusedFrame = focusedCoreFrame(); | 976 RefPtrWillBeRawPtr<Frame> focusedFrame = focusedCoreFrame(); |
959 if (focusedFrame && focusedFrame->isRemoteFrameTemporary()) { | 977 if (focusedFrame && focusedFrame->isRemoteFrameTemporary()) { |
960 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrameT
emporary(focusedFrame.get())); | 978 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrameT
emporary(focusedFrame.get())); |
961 webFrame->client()->forwardInputEvent(&event); | 979 webFrame->client()->forwardInputEvent(&event); |
962 return true; | 980 return true; |
963 } | 981 } |
964 | 982 |
965 if (!focusedFrame || !focusedFrame->isLocalFrame()) | 983 if (!focusedFrame || !focusedFrame->isLocalFrame()) |
966 return false; | 984 return false; |
967 | 985 |
968 RefPtr<LocalFrame> frame = toLocalFrame(focusedFrame.get()); | 986 LocalFrame* frame = toLocalFrame(focusedFrame.get()); |
969 | 987 |
970 PlatformKeyboardEventBuilder evt(event); | 988 PlatformKeyboardEventBuilder evt(event); |
971 | 989 |
972 if (frame->eventHandler().keyEvent(evt)) { | 990 if (frame->eventHandler().keyEvent(evt)) { |
973 if (WebInputEvent::RawKeyDown == event.type) { | 991 if (WebInputEvent::RawKeyDown == event.type) { |
974 // Suppress the next keypress event unless the focused node is a plu
g-in node. | 992 // Suppress the next keypress event unless the focused node is a plu
g-in node. |
975 // (Flash needs these keypress events to handle non-US keyboards.) | 993 // (Flash needs these keypress events to handle non-US keyboards.) |
976 Element* element = focusedElement(); | 994 Element* element = focusedElement(); |
977 if (!element || !element->renderer() || !element->renderer()->isEmbe
ddedObject()) | 995 if (!element || !element->renderer() || !element->renderer()->isEmbe
ddedObject()) |
978 m_suppressNextKeypressEvent = true; | 996 m_suppressNextKeypressEvent = true; |
(...skipping 1041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2020 { | 2038 { |
2021 TRACE_EVENT_ASYNC_END0("input", "capturing mouse", this); | 2039 TRACE_EVENT_ASYNC_END0("input", "capturing mouse", this); |
2022 m_mouseCaptureNode = nullptr; | 2040 m_mouseCaptureNode = nullptr; |
2023 } | 2041 } |
2024 | 2042 |
2025 void WebViewImpl::setFocus(bool enable) | 2043 void WebViewImpl::setFocus(bool enable) |
2026 { | 2044 { |
2027 m_page->focusController().setFocused(enable); | 2045 m_page->focusController().setFocused(enable); |
2028 if (enable) { | 2046 if (enable) { |
2029 m_page->focusController().setActive(true); | 2047 m_page->focusController().setActive(true); |
2030 RefPtr<Frame> focusedFrame = m_page->focusController().focusedFrame(); | 2048 RefPtrWillBeRawPtr<Frame> focusedFrame = m_page->focusController().focus
edFrame(); |
2031 if (focusedFrame && focusedFrame->isLocalFrame()) { | 2049 if (focusedFrame && focusedFrame->isLocalFrame()) { |
2032 LocalFrame* localFrame = toLocalFrame(focusedFrame.get()); | 2050 LocalFrame* localFrame = toLocalFrame(focusedFrame.get()); |
2033 Element* element = localFrame->document()->focusedElement(); | 2051 Element* element = localFrame->document()->focusedElement(); |
2034 if (element && localFrame->selection().selection().isNone()) { | 2052 if (element && localFrame->selection().selection().isNone()) { |
2035 // If the selection was cleared while the WebView was not | 2053 // If the selection was cleared while the WebView was not |
2036 // focused, then the focus element shows with a focus ring but | 2054 // focused, then the focus element shows with a focus ring but |
2037 // no caret and does respond to keyboard inputs. | 2055 // no caret and does respond to keyboard inputs. |
2038 if (element->isTextFormControl()) { | 2056 if (element->isTextFormControl()) { |
2039 element->updateFocusAppearance(true); | 2057 element->updateFocusAppearance(true); |
2040 } else if (element->isContentEditable()) { | 2058 } else if (element->isContentEditable()) { |
(...skipping 12 matching lines...) Expand all Loading... |
2053 | 2071 |
2054 // Clear focus on the currently focused frame if any. | 2072 // Clear focus on the currently focused frame if any. |
2055 if (!m_page) | 2073 if (!m_page) |
2056 return; | 2074 return; |
2057 | 2075 |
2058 LocalFrame* frame = m_page->mainFrame() && m_page->mainFrame()->isLocalF
rame() | 2076 LocalFrame* frame = m_page->mainFrame() && m_page->mainFrame()->isLocalF
rame() |
2059 ? m_page->deprecatedLocalMainFrame() : 0; | 2077 ? m_page->deprecatedLocalMainFrame() : 0; |
2060 if (!frame) | 2078 if (!frame) |
2061 return; | 2079 return; |
2062 | 2080 |
2063 RefPtr<Frame> focusedFrame = m_page->focusController().focusedFrame(); | 2081 RefPtrWillBeRawPtr<Frame> focusedFrame = m_page->focusController().focus
edFrame(); |
2064 if (focusedFrame && focusedFrame->isLocalFrame()) { | 2082 if (focusedFrame && focusedFrame->isLocalFrame()) { |
2065 // Finish an ongoing composition to delete the composition node. | 2083 // Finish an ongoing composition to delete the composition node. |
2066 if (toLocalFrame(focusedFrame.get())->inputMethodController().hasCom
position()) { | 2084 if (toLocalFrame(focusedFrame.get())->inputMethodController().hasCom
position()) { |
2067 if (m_autofillClient) | 2085 if (m_autofillClient) |
2068 m_autofillClient->setIgnoreTextChanges(true); | 2086 m_autofillClient->setIgnoreTextChanges(true); |
2069 | 2087 |
2070 toLocalFrame(focusedFrame.get())->inputMethodController().confir
mComposition(); | 2088 toLocalFrame(focusedFrame.get())->inputMethodController().confir
mComposition(); |
2071 | 2089 |
2072 if (m_autofillClient) | 2090 if (m_autofillClient) |
2073 m_autofillClient->setIgnoreTextChanges(false); | 2091 m_autofillClient->setIgnoreTextChanges(false); |
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2664 Frame* frame = page()->focusController().focusedOrMainFrame(); | 2682 Frame* frame = page()->focusController().focusedOrMainFrame(); |
2665 if (frame->isLocalFrame()) { | 2683 if (frame->isLocalFrame()) { |
2666 if (Document* document = toLocalFrame(frame)->document()) | 2684 if (Document* document = toLocalFrame(frame)->document()) |
2667 document->setFocusedElement(nullptr); | 2685 document->setFocusedElement(nullptr); |
2668 } | 2686 } |
2669 page()->focusController().setInitialFocus(reverse ? FocusTypeBackward : Focu
sTypeForward); | 2687 page()->focusController().setInitialFocus(reverse ? FocusTypeBackward : Focu
sTypeForward); |
2670 } | 2688 } |
2671 | 2689 |
2672 void WebViewImpl::clearFocusedElement() | 2690 void WebViewImpl::clearFocusedElement() |
2673 { | 2691 { |
2674 RefPtr<Frame> frame = focusedCoreFrame(); | 2692 RefPtrWillBeRawPtr<Frame> frame = focusedCoreFrame(); |
2675 if (!frame || !frame->isLocalFrame()) | 2693 if (!frame || !frame->isLocalFrame()) |
2676 return; | 2694 return; |
2677 | 2695 |
2678 LocalFrame* localFrame = toLocalFrame(frame.get()); | 2696 LocalFrame* localFrame = toLocalFrame(frame.get()); |
2679 | 2697 |
2680 RefPtrWillBeRawPtr<Document> document = localFrame->document(); | 2698 RefPtrWillBeRawPtr<Document> document = localFrame->document(); |
2681 if (!document) | 2699 if (!document) |
2682 return; | 2700 return; |
2683 | 2701 |
2684 RefPtrWillBeRawPtr<Element> oldFocusedElement = document->focusedElement(); | 2702 RefPtrWillBeRawPtr<Element> oldFocusedElement = document->focusedElement(); |
(...skipping 1605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4290 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi
nedConstraints(); | 4308 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi
nedConstraints(); |
4291 | 4309 |
4292 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) | 4310 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) |
4293 return false; | 4311 return false; |
4294 | 4312 |
4295 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width | 4313 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width |
4296 || (constraints.minimumScale == constraints.maximumScale && constraints.
minimumScale != -1); | 4314 || (constraints.minimumScale == constraints.maximumScale && constraints.
minimumScale != -1); |
4297 } | 4315 } |
4298 | 4316 |
4299 } // namespace blink | 4317 } // namespace blink |
OLD | NEW |