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

Side by Side Diff: Source/web/WebViewImpl.cpp

Issue 517043003: Move Frame to the Oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Update OilpanExpectations Created 6 years, 3 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
OLDNEW
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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 // Change the text zoom level by kTextSizeMultiplierRatio each time the user 202 // Change the text zoom level by kTextSizeMultiplierRatio each time the user
203 // zooms text in or out (ie., change by 20%). The min and max values limit 203 // zooms text in or out (ie., change by 20%). The min and max values limit
204 // text zoom to half and 3x the original text size. These three values match 204 // text zoom to half and 3x the original text size. These three values match
205 // those in Apple's port in WebKit/WebKit/WebView/WebView.mm 205 // those in Apple's port in WebKit/WebKit/WebView/WebView.mm
206 const double WebView::textSizeMultiplierRatio = 1.2; 206 const double WebView::textSizeMultiplierRatio = 1.2;
207 const double WebView::minTextSizeMultiplier = 0.5; 207 const double WebView::minTextSizeMultiplier = 0.5;
208 const double WebView::maxTextSizeMultiplier = 3.0; 208 const double WebView::maxTextSizeMultiplier = 3.0;
209 209
210 // Used to defer all page activity in cases where the embedder wishes to run 210 // Used to defer all page activity in cases where the embedder wishes to run
211 // a nested event loop. Using a stack enables nesting of message loop invocation s. 211 // a nested event loop. Using a stack enables nesting of message loop invocation s.
212 static Vector<ScopedPageLoadDeferrer*>& pageLoadDeferrerStack() 212 static WillBeHeapVector<RawPtrWillBeMember<ScopedPageLoadDeferrer> >& pageLoadDe ferrerStack()
213 { 213 {
214 DEFINE_STATIC_LOCAL(Vector<ScopedPageLoadDeferrer*>, deferrerStack, ()); 214 DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<WillBeHeapVector<RawPtrWillBeMemb er<ScopedPageLoadDeferrer> > >, deferrerStack, (adoptPtrWillBeNoop(new WillBeHea pVector<RawPtrWillBeMember<ScopedPageLoadDeferrer> > ())));
215 return deferrerStack; 215 return *deferrerStack;
216 } 216 }
217 217
218 // Ensure that the WebDragOperation enum values stay in sync with the original 218 // Ensure that the WebDragOperation enum values stay in sync with the original
219 // DragOperation constants. 219 // DragOperation constants.
220 #define COMPILE_ASSERT_MATCHING_ENUM(coreName) \ 220 #define COMPILE_ASSERT_MATCHING_ENUM(coreName) \
221 COMPILE_ASSERT(int(coreName) == int(Web##coreName), dummy##coreName) 221 COMPILE_ASSERT(int(coreName) == int(Web##coreName), dummy##coreName)
222 COMPILE_ASSERT_MATCHING_ENUM(DragOperationNone); 222 COMPILE_ASSERT_MATCHING_ENUM(DragOperationNone);
223 COMPILE_ASSERT_MATCHING_ENUM(DragOperationCopy); 223 COMPILE_ASSERT_MATCHING_ENUM(DragOperationCopy);
224 COMPILE_ASSERT_MATCHING_ENUM(DragOperationLink); 224 COMPILE_ASSERT_MATCHING_ENUM(DragOperationLink);
225 COMPILE_ASSERT_MATCHING_ENUM(DragOperationGeneric); 225 COMPILE_ASSERT_MATCHING_ENUM(DragOperationGeneric);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 308
309 void WebView::willEnterModalLoop() 309 void WebView::willEnterModalLoop()
310 { 310 {
311 pageLoadDeferrerStack().append(new ScopedPageLoadDeferrer()); 311 pageLoadDeferrerStack().append(new ScopedPageLoadDeferrer());
312 } 312 }
313 313
314 void WebView::didExitModalLoop() 314 void WebView::didExitModalLoop()
315 { 315 {
316 ASSERT(pageLoadDeferrerStack().size()); 316 ASSERT(pageLoadDeferrerStack().size());
317 317
318 delete pageLoadDeferrerStack().last(); 318 ScopedPageLoadDeferrer* deferrer = pageLoadDeferrerStack().last();
319 #if ENABLE(OILPAN)
320 deferrer->dispose();
321 #else
322 delete deferrer;
haraken 2014/09/08 07:25:59 Can we use OwnPtr<ScopedPageLoadDeferrer> and avoi
sof 2014/09/08 21:17:46 I don't quite see where you're going with this.
323 #endif
319 pageLoadDeferrerStack().removeLast(); 324 pageLoadDeferrerStack().removeLast();
320 } 325 }
321 326
322 void WebViewImpl::setMainFrame(WebFrame* frame) 327 void WebViewImpl::setMainFrame(WebFrame* frame)
323 { 328 {
324 if (frame->isWebLocalFrame()) 329 if (frame->isWebLocalFrame()) {
330 #if ENABLE(OILPAN)
331 m_localMainFrame = toWebLocalFrameImpl(frame);
332 m_remoteMainFrame.clear();
haraken 2014/09/08 07:25:59 Can we add an ASSERT somewhere to verify that only
sof 2014/09/08 21:17:47 assert added to ~WebViewImpl.
333 #endif
325 toWebLocalFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0, nullAtom, nullAtom); 334 toWebLocalFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0, nullAtom, nullAtom);
326 else 335 } else {
336 #if ENABLE(OILPAN)
337 m_localMainFrame.clear();
338 m_remoteMainFrame = toWebRemoteFrameImpl(frame);
339 #endif
327 toWebRemoteFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0 , nullAtom); 340 toWebRemoteFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0 , nullAtom);
341 }
328 } 342 }
329 343
330 void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient) 344 void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient)
331 { 345 {
332 m_autofillClient = autofillClient; 346 m_autofillClient = autofillClient;
333 } 347 }
334 348
335 void WebViewImpl::setCredentialManagerClient(WebCredentialManagerClient* webCred entialManagerClient) 349 void WebViewImpl::setCredentialManagerClient(WebCredentialManagerClient* webCred entialManagerClient)
336 { 350 {
337 ASSERT(m_page); 351 ASSERT(m_page);
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 return m_selectPopup->handleKeyEvent(PlatformKeyboardEventBuilder(event) ); 961 return m_selectPopup->handleKeyEvent(PlatformKeyboardEventBuilder(event) );
948 if (m_pagePopup) { 962 if (m_pagePopup) {
949 m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); 963 m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event));
950 // We need to ignore the next Char event after this otherwise pressing 964 // We need to ignore the next Char event after this otherwise pressing
951 // enter when selecting an item in the popup will go to the page. 965 // enter when selecting an item in the popup will go to the page.
952 if (WebInputEvent::RawKeyDown == event.type) 966 if (WebInputEvent::RawKeyDown == event.type)
953 m_suppressNextKeypressEvent = true; 967 m_suppressNextKeypressEvent = true;
954 return true; 968 return true;
955 } 969 }
956 970
957 RefPtr<Frame> focusedFrame = focusedCoreFrame(); 971 RefPtrWillBeRawPtr<Frame> focusedFrame = focusedCoreFrame();
958 if (focusedFrame && focusedFrame->isRemoteFrameTemporary()) { 972 if (focusedFrame && focusedFrame->isRemoteFrameTemporary()) {
959 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrameT emporary(focusedFrame.get())); 973 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrameT emporary(focusedFrame.get()));
960 webFrame->client()->forwardInputEvent(&event); 974 webFrame->client()->forwardInputEvent(&event);
961 return true; 975 return true;
962 } 976 }
963 977
964 if (!focusedFrame || !focusedFrame->isLocalFrame()) 978 if (!focusedFrame || !focusedFrame->isLocalFrame())
965 return false; 979 return false;
966 980
967 RefPtr<LocalFrame> frame = toLocalFrame(focusedFrame.get()); 981 LocalFrame* frame = toLocalFrame(focusedFrame.get());
968 982
969 PlatformKeyboardEventBuilder evt(event); 983 PlatformKeyboardEventBuilder evt(event);
970 984
971 if (frame->eventHandler().keyEvent(evt)) { 985 if (frame->eventHandler().keyEvent(evt)) {
972 if (WebInputEvent::RawKeyDown == event.type) { 986 if (WebInputEvent::RawKeyDown == event.type) {
973 // Suppress the next keypress event unless the focused node is a plu g-in node. 987 // Suppress the next keypress event unless the focused node is a plu g-in node.
974 // (Flash needs these keypress events to handle non-US keyboards.) 988 // (Flash needs these keypress events to handle non-US keyboards.)
975 Element* element = focusedElement(); 989 Element* element = focusedElement();
976 if (!element || !element->renderer() || !element->renderer()->isEmbe ddedObject()) 990 if (!element || !element->renderer() || !element->renderer()->isEmbe ddedObject())
977 m_suppressNextKeypressEvent = true; 991 m_suppressNextKeypressEvent = true;
(...skipping 1035 matching lines...) Expand 10 before | Expand all | Expand 10 after
2013 { 2027 {
2014 TRACE_EVENT_ASYNC_END0("input", "capturing mouse", this); 2028 TRACE_EVENT_ASYNC_END0("input", "capturing mouse", this);
2015 m_mouseCaptureNode = nullptr; 2029 m_mouseCaptureNode = nullptr;
2016 } 2030 }
2017 2031
2018 void WebViewImpl::setFocus(bool enable) 2032 void WebViewImpl::setFocus(bool enable)
2019 { 2033 {
2020 m_page->focusController().setFocused(enable); 2034 m_page->focusController().setFocused(enable);
2021 if (enable) { 2035 if (enable) {
2022 m_page->focusController().setActive(true); 2036 m_page->focusController().setActive(true);
2023 RefPtr<Frame> focusedFrame = m_page->focusController().focusedFrame(); 2037 RefPtrWillBeRawPtr<Frame> focusedFrame = m_page->focusController().focus edFrame();
2024 if (focusedFrame && focusedFrame->isLocalFrame()) { 2038 if (focusedFrame && focusedFrame->isLocalFrame()) {
2025 LocalFrame* localFrame = toLocalFrame(focusedFrame.get()); 2039 LocalFrame* localFrame = toLocalFrame(focusedFrame.get());
2026 Element* element = localFrame->document()->focusedElement(); 2040 Element* element = localFrame->document()->focusedElement();
2027 if (element && localFrame->selection().selection().isNone()) { 2041 if (element && localFrame->selection().selection().isNone()) {
2028 // If the selection was cleared while the WebView was not 2042 // If the selection was cleared while the WebView was not
2029 // focused, then the focus element shows with a focus ring but 2043 // focused, then the focus element shows with a focus ring but
2030 // no caret and does respond to keyboard inputs. 2044 // no caret and does respond to keyboard inputs.
2031 if (element->isTextFormControl()) { 2045 if (element->isTextFormControl()) {
2032 element->updateFocusAppearance(true); 2046 element->updateFocusAppearance(true);
2033 } else if (element->isContentEditable()) { 2047 } else if (element->isContentEditable()) {
(...skipping 12 matching lines...) Expand all
2046 2060
2047 // Clear focus on the currently focused frame if any. 2061 // Clear focus on the currently focused frame if any.
2048 if (!m_page) 2062 if (!m_page)
2049 return; 2063 return;
2050 2064
2051 LocalFrame* frame = m_page->mainFrame() && m_page->mainFrame()->isLocalF rame() 2065 LocalFrame* frame = m_page->mainFrame() && m_page->mainFrame()->isLocalF rame()
2052 ? m_page->deprecatedLocalMainFrame() : 0; 2066 ? m_page->deprecatedLocalMainFrame() : 0;
2053 if (!frame) 2067 if (!frame)
2054 return; 2068 return;
2055 2069
2056 RefPtr<Frame> focusedFrame = m_page->focusController().focusedFrame(); 2070 RefPtrWillBeRawPtr<Frame> focusedFrame = m_page->focusController().focus edFrame();
2057 if (focusedFrame && focusedFrame->isLocalFrame()) { 2071 if (focusedFrame && focusedFrame->isLocalFrame()) {
2058 // Finish an ongoing composition to delete the composition node. 2072 // Finish an ongoing composition to delete the composition node.
2059 if (toLocalFrame(focusedFrame.get())->inputMethodController().hasCom position()) { 2073 if (toLocalFrame(focusedFrame.get())->inputMethodController().hasCom position()) {
2060 if (m_autofillClient) 2074 if (m_autofillClient)
2061 m_autofillClient->setIgnoreTextChanges(true); 2075 m_autofillClient->setIgnoreTextChanges(true);
2062 2076
2063 toLocalFrame(focusedFrame.get())->inputMethodController().confir mComposition(); 2077 toLocalFrame(focusedFrame.get())->inputMethodController().confir mComposition();
2064 2078
2065 if (m_autofillClient) 2079 if (m_autofillClient)
2066 m_autofillClient->setIgnoreTextChanges(false); 2080 m_autofillClient->setIgnoreTextChanges(false);
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
2656 Frame* frame = page()->focusController().focusedOrMainFrame(); 2670 Frame* frame = page()->focusController().focusedOrMainFrame();
2657 if (frame->isLocalFrame()) { 2671 if (frame->isLocalFrame()) {
2658 if (Document* document = toLocalFrame(frame)->document()) 2672 if (Document* document = toLocalFrame(frame)->document())
2659 document->setFocusedElement(nullptr); 2673 document->setFocusedElement(nullptr);
2660 } 2674 }
2661 page()->focusController().setInitialFocus(reverse ? FocusTypeBackward : Focu sTypeForward); 2675 page()->focusController().setInitialFocus(reverse ? FocusTypeBackward : Focu sTypeForward);
2662 } 2676 }
2663 2677
2664 void WebViewImpl::clearFocusedElement() 2678 void WebViewImpl::clearFocusedElement()
2665 { 2679 {
2666 RefPtr<Frame> frame = focusedCoreFrame(); 2680 RefPtrWillBeRawPtr<Frame> frame = focusedCoreFrame();
2667 if (!frame || !frame->isLocalFrame()) 2681 if (!frame || !frame->isLocalFrame())
2668 return; 2682 return;
2669 2683
2670 LocalFrame* localFrame = toLocalFrame(frame.get()); 2684 LocalFrame* localFrame = toLocalFrame(frame.get());
2671 2685
2672 RefPtrWillBeRawPtr<Document> document = localFrame->document(); 2686 RefPtrWillBeRawPtr<Document> document = localFrame->document();
2673 if (!document) 2687 if (!document)
2674 return; 2688 return;
2675 2689
2676 RefPtrWillBeRawPtr<Element> oldFocusedElement = document->focusedElement(); 2690 RefPtrWillBeRawPtr<Element> oldFocusedElement = document->focusedElement();
(...skipping 1603 matching lines...) Expand 10 before | Expand all | Expand 10 after
4280 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints(); 4294 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints();
4281 4295
4282 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 4296 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
4283 return false; 4297 return false;
4284 4298
4285 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width 4299 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width
4286 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1); 4300 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1);
4287 } 4301 }
4288 4302
4289 } // namespace blink 4303 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698