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

Side by Side Diff: Source/WebCore/page/FrameView.cpp

Issue 13963006: Remove frame flattening support as Chromium has no intention of using it (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 8 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 | « Source/WebCore/page/FrameView.h ('k') | Source/WebCore/page/Settings.in » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
3 * 1999 Lars Knoll <knoll@kde.org> 3 * 1999 Lars Knoll <knoll@kde.org>
4 * 1999 Antti Koivisto <koivisto@kde.org> 4 * 1999 Antti Koivisto <koivisto@kde.org>
5 * 2000 Dirk Mueller <mueller@kde.org> 5 * 2000 Dirk Mueller <mueller@kde.org>
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com)
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * Copyright (C) 2009 Google Inc. All rights reserved. 9 * Copyright (C) 2009 Google Inc. All rights reserved.
10 * 10 *
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 // make it update the rendering area when set 471 // make it update the rendering area when set
472 m_margins.setWidth(w); 472 m_margins.setWidth(w);
473 } 473 }
474 474
475 void FrameView::setMarginHeight(LayoutUnit h) 475 void FrameView::setMarginHeight(LayoutUnit h)
476 { 476 {
477 // make it update the rendering area when set 477 // make it update the rendering area when set
478 m_margins.setHeight(h); 478 m_margins.setHeight(h);
479 } 479 }
480 480
481 bool FrameView::avoidScrollbarCreation() const
482 {
483 ASSERT(m_frame);
484
485 // with frame flattening no subframe can have scrollbars
486 // but we also cannot turn scrollbars off as we determine
487 // our flattening policy using that.
488
489 if (!m_frame->ownerElement())
490 return false;
491
492 if (!m_frame->settings() || m_frame->settings()->frameFlatteningEnabled())
493 return true;
494
495 return false;
496 }
497
498 void FrameView::setCanHaveScrollbars(bool canHaveScrollbars) 481 void FrameView::setCanHaveScrollbars(bool canHaveScrollbars)
499 { 482 {
500 m_canHaveScrollbars = canHaveScrollbars; 483 m_canHaveScrollbars = canHaveScrollbars;
501 ScrollView::setCanHaveScrollbars(canHaveScrollbars); 484 ScrollView::setCanHaveScrollbars(canHaveScrollbars);
502 } 485 }
503 486
504 void FrameView::updateCanHaveScrollbars() 487 void FrameView::updateCanHaveScrollbars()
505 { 488 {
506 ScrollbarMode hMode; 489 ScrollbarMode hMode;
507 ScrollbarMode vMode; 490 ScrollbarMode vMode;
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 hMode = ScrollbarAuto; 659 hMode = ScrollbarAuto;
677 // Seamless documents begin with heights of 0; we special case that here 660 // Seamless documents begin with heights of 0; we special case that here
678 // to correctly render documents that don't need scrollbars. 661 // to correctly render documents that don't need scrollbars.
679 IntSize fullVisibleSize = visibleContentRect(IncludeScrollbars).size(); 662 IntSize fullVisibleSize = visibleContentRect(IncludeScrollbars).size();
680 bool isSeamlessDocument = frame() && frame()->document() && frame()->doc ument()->shouldDisplaySeamlesslyWithParent(); 663 bool isSeamlessDocument = frame() && frame()->document() && frame()->doc ument()->shouldDisplaySeamlesslyWithParent();
681 vMode = (isSeamlessDocument && !fullVisibleSize.height()) ? ScrollbarAlw aysOff : ScrollbarAuto; 664 vMode = (isSeamlessDocument && !fullVisibleSize.height()) ? ScrollbarAlw aysOff : ScrollbarAuto;
682 } else { 665 } else {
683 hMode = ScrollbarAlwaysOff; 666 hMode = ScrollbarAlwaysOff;
684 vMode = ScrollbarAlwaysOff; 667 vMode = ScrollbarAlwaysOff;
685 } 668 }
686 669
687 if (!m_layoutRoot) { 670 if (!m_layoutRoot) {
688 Document* document = m_frame->document(); 671 Document* document = m_frame->document();
689 Node* documentElement = document->documentElement(); 672 Node* documentElement = document->documentElement();
690 RenderObject* rootRenderer = documentElement ? documentElement->renderer () : 0; 673 RenderObject* rootRenderer = documentElement ? documentElement->renderer () : 0;
691 Node* body = document->body(); 674 Node* body = document->body();
692 if (body && body->renderer()) { 675 if (body && body->renderer()) {
693 if (body->hasTagName(framesetTag) && m_frame->settings() && !m_frame ->settings()->frameFlatteningEnabled()) { 676 if (body->hasTagName(framesetTag)) {
694 vMode = ScrollbarAlwaysOff; 677 vMode = ScrollbarAlwaysOff;
695 hMode = ScrollbarAlwaysOff; 678 hMode = ScrollbarAlwaysOff;
696 } else if (body->hasTagName(bodyTag)) { 679 } else if (body->hasTagName(bodyTag)) {
697 // It's sufficient to just check the X overflow, 680 // It's sufficient to just check the X overflow,
698 // since it's illegal to have visible in only one direction. 681 // since it's illegal to have visible in only one direction.
699 RenderObject* o = rootRenderer->style()->overflowX() == OVISIBLE && document->documentElement()->hasTagName(htmlTag) ? body->renderer() : rootRe nderer; 682 RenderObject* o = rootRenderer->style()->overflowX() == OVISIBLE && document->documentElement()->hasTagName(htmlTag) ? body->renderer() : rootRe nderer;
700 applyOverflowToViewport(o, hMode, vMode); 683 applyOverflowToViewport(o, hMode, vMode);
701 } 684 }
702 } else if (rootRenderer) 685 } else if (rootRenderer)
703 applyOverflowToViewport(rootRenderer, hMode, vMode); 686 applyOverflowToViewport(rootRenderer, hMode, vMode);
704 } 687 }
705 } 688 }
706 689
707 void FrameView::updateCompositingLayersAfterStyleChange() 690 void FrameView::updateCompositingLayersAfterStyleChange()
708 { 691 {
709 RenderView* renderView = this->renderView(); 692 RenderView* renderView = this->renderView();
710 if (!renderView) 693 if (!renderView)
711 return; 694 return;
712 695
713 // If we expect to update compositing after an incipient layout, don't do so here. 696 // If we expect to update compositing after an incipient layout, don't do so here.
714 if (m_doingPreLayoutStyleUpdate || layoutPending() || renderView->needsLayou t()) 697 if (m_doingPreLayoutStyleUpdate || layoutPending() || renderView->needsLayou t())
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 return; 918 return;
936 919
937 TRACE_EVENT0("webkit", "FrameView::layout"); 920 TRACE_EVENT0("webkit", "FrameView::layout");
938 921
939 // Protect the view from being deleted during layout (in recalcStyle) 922 // Protect the view from being deleted during layout (in recalcStyle)
940 RefPtr<FrameView> protector(this); 923 RefPtr<FrameView> protector(this);
941 924
942 // Every scroll that happens during layout is programmatic. 925 // Every scroll that happens during layout is programmatic.
943 TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, tru e); 926 TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, tru e);
944 927
945 bool inChildFrameLayoutWithFrameFlattening = isInChildFrameWithFrameFlatteni ng();
946
947 if (inChildFrameLayoutWithFrameFlattening) {
948 if (doLayoutWithFrameFlattening(allowSubtree))
949 return;
950 }
951
952 m_layoutTimer.stop(); 928 m_layoutTimer.stop();
953 m_delayedLayout = false; 929 m_delayedLayout = false;
954 m_setNeedsLayoutWasDeferred = false; 930 m_setNeedsLayoutWasDeferred = false;
955 931
956 if (!m_frame) { 932 if (!m_frame) {
957 // FIXME: Do we need to set m_size.width here? 933 // FIXME: Do we need to set m_size.width here?
958 // FIXME: Should we set m_size.height here too? 934 // FIXME: Should we set m_size.height here too?
959 m_size.setWidth(layoutWidth()); 935 m_size.setWidth(layoutWidth());
960 return; 936 return;
961 } 937 }
(...skipping 13 matching lines...) Expand all
975 ASSERT(m_frame->view() == this); 951 ASSERT(m_frame->view() == this);
976 952
977 Document* document = m_frame->document(); 953 Document* document = m_frame->document();
978 ASSERT(!document->inPageCache()); 954 ASSERT(!document->inPageCache());
979 bool subtree; 955 bool subtree;
980 RenderObject* root; 956 RenderObject* root;
981 957
982 { 958 {
983 TemporaryChange<bool> changeSchedulingEnabled(m_layoutSchedulingEnabled, false); 959 TemporaryChange<bool> changeSchedulingEnabled(m_layoutSchedulingEnabled, false);
984 960
985 if (!m_nestedLayoutCount && !m_inSynchronousPostLayout && m_postLayoutTa sksTimer.isActive() && !inChildFrameLayoutWithFrameFlattening) { 961 if (!m_nestedLayoutCount && !m_inSynchronousPostLayout && m_postLayoutTa sksTimer.isActive()) {
986 // This is a new top-level layout. If there are any remaining tasks from the previous 962 // This is a new top-level layout. If there are any remaining tasks from the previous
987 // layout, finish them now. 963 // layout, finish them now.
988 m_inSynchronousPostLayout = true; 964 m_inSynchronousPostLayout = true;
989 performPostLayoutTasks(); 965 performPostLayoutTasks();
990 m_inSynchronousPostLayout = false; 966 m_inSynchronousPostLayout = false;
991 } 967 }
992 968
993 // Viewport-dependent media queries may cause us to need completely diff erent style information. 969 // Viewport-dependent media queries may cause us to need completely diff erent style information.
994 // Check that here. 970 // Check that here.
995 if (document->styleResolver()->affectedByViewportChange()) { 971 if (document->styleResolver()->affectedByViewportChange()) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 RenderLayer* layer; 1003 RenderLayer* layer;
1028 { 1004 {
1029 TemporaryChange<bool> changeSchedulingEnabled(m_layoutSchedulingEnabled, false); 1005 TemporaryChange<bool> changeSchedulingEnabled(m_layoutSchedulingEnabled, false);
1030 1006
1031 m_nestedLayoutCount++; 1007 m_nestedLayoutCount++;
1032 1008
1033 if (!m_layoutRoot) { 1009 if (!m_layoutRoot) {
1034 Document* document = m_frame->document(); 1010 Document* document = m_frame->document();
1035 Node* body = document->body(); 1011 Node* body = document->body();
1036 if (body && body->renderer()) { 1012 if (body && body->renderer()) {
1037 if (body->hasTagName(framesetTag) && m_frame->settings() && !m_f rame->settings()->frameFlatteningEnabled()) { 1013 if (body->hasTagName(framesetTag)) {
1038 body->renderer()->setChildNeedsLayout(true); 1014 body->renderer()->setChildNeedsLayout(true);
1039 } else if (body->hasTagName(bodyTag)) { 1015 } else if (body->hasTagName(bodyTag)) {
1040 if (!m_firstLayout && m_size.height() != layoutHeight() && b ody->renderer()->enclosingBox()->stretchesToViewport()) 1016 if (!m_firstLayout && m_size.height() != layoutHeight() && b ody->renderer()->enclosingBox()->stretchesToViewport())
1041 body->renderer()->setChildNeedsLayout(true); 1017 body->renderer()->setChildNeedsLayout(true);
1042 } 1018 }
1043 } 1019 }
1044 1020
1045 #ifdef INSTRUMENT_LAYOUT_SCHEDULING 1021 #ifdef INSTRUMENT_LAYOUT_SCHEDULING
1046 if (m_firstLayout && !m_frame->ownerElement()) 1022 if (m_firstLayout && !m_frame->ownerElement())
1047 printf("Elapsed time before first layout: %d\n", document->elaps edTime()); 1023 printf("Elapsed time before first layout: %d\n", document->elaps edTime());
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 ASSERT(!root->needsLayout()); 1135 ASSERT(!root->needsLayout());
1160 1136
1161 updateCanBlitOnScrollRecursively(); 1137 updateCanBlitOnScrollRecursively();
1162 1138
1163 if (document->hasListenerType(Document::OVERFLOWCHANGED_LISTENER)) 1139 if (document->hasListenerType(Document::OVERFLOWCHANGED_LISTENER))
1164 updateOverflowStatus(layoutWidth() < contentsWidth(), 1140 updateOverflowStatus(layoutWidth() < contentsWidth(),
1165 layoutHeight() < contentsHeight()); 1141 layoutHeight() < contentsHeight());
1166 1142
1167 if (!m_postLayoutTasksTimer.isActive()) { 1143 if (!m_postLayoutTasksTimer.isActive()) {
1168 if (!m_inSynchronousPostLayout) { 1144 if (!m_inSynchronousPostLayout) {
1169 if (inChildFrameLayoutWithFrameFlattening) { 1145 m_inSynchronousPostLayout = true;
1170 if (RenderView* renderView = this->renderView()) 1146 // Calls resumeScheduledEvents()
1171 renderView->updateWidgetPositions(); 1147 performPostLayoutTasks();
1172 } else { 1148 m_inSynchronousPostLayout = false;
1173 m_inSynchronousPostLayout = true;
1174 // Calls resumeScheduledEvents()
1175 performPostLayoutTasks();
1176 m_inSynchronousPostLayout = false;
1177 }
1178 } 1149 }
1179 1150
1180 if (!m_postLayoutTasksTimer.isActive() && (needsLayout() || m_inSynchron ousPostLayout || inChildFrameLayoutWithFrameFlattening)) { 1151 if (!m_postLayoutTasksTimer.isActive() && (needsLayout() || m_inSynchron ousPostLayout)) {
1181 // If we need layout or are already in a synchronous call to postLay outTasks(), 1152 // If we need layout or are already in a synchronous call to postLay outTasks(),
1182 // defer widget updates and event dispatch until after we return. po stLayoutTasks() 1153 // defer widget updates and event dispatch until after we return. po stLayoutTasks()
1183 // can make us need to update again, and we can get stuck in a nasty cycle unless 1154 // can make us need to update again, and we can get stuck in a nasty cycle unless
1184 // we call it through the timer here. 1155 // we call it through the timer here.
1185 m_postLayoutTasksTimer.startOneShot(0); 1156 m_postLayoutTasksTimer.startOneShot(0);
1186 if (needsLayout()) { 1157 if (needsLayout()) {
1187 m_actionScheduler->pause(); 1158 m_actionScheduler->pause();
1188 layout(); 1159 layout();
1189 } 1160 }
1190 } 1161 }
1191 } else { 1162 } else {
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
2023 m_layoutRoot->markContainingBlocksForLayout(false); 1994 m_layoutRoot->markContainingBlocksForLayout(false);
2024 m_layoutRoot = 0; 1995 m_layoutRoot = 0;
2025 } 1996 }
2026 if (!m_layoutSchedulingEnabled) 1997 if (!m_layoutSchedulingEnabled)
2027 return; 1998 return;
2028 if (!needsLayout()) 1999 if (!needsLayout())
2029 return; 2000 return;
2030 if (!m_frame->document()->shouldScheduleLayout()) 2001 if (!m_frame->document()->shouldScheduleLayout())
2031 return; 2002 return;
2032 InspectorInstrumentation::didInvalidateLayout(m_frame.get()); 2003 InspectorInstrumentation::didInvalidateLayout(m_frame.get());
2033 // When frame flattening is enabled, the contents of the frame could affect the layout of the parent frames.
2034 // Also invalidate parent frame starting from the owner element of this fram e.
2035 if (m_frame->ownerRenderer() && isInChildFrameWithFrameFlattening())
ojan 2013/04/16 19:41:09 This looks to be the only functional difference be
2036 m_frame->ownerRenderer()->setNeedsLayout(true, MarkContainingBlockChain) ;
2037 2004
2038 int delay = m_frame->document()->minimumLayoutDelay(); 2005 int delay = m_frame->document()->minimumLayoutDelay();
2039 if (m_layoutTimer.isActive() && m_delayedLayout && !delay) 2006 if (m_layoutTimer.isActive() && m_delayedLayout && !delay)
2040 unscheduleRelayout(); 2007 unscheduleRelayout();
2041 if (m_layoutTimer.isActive()) 2008 if (m_layoutTimer.isActive())
2042 return; 2009 return;
2043 2010
2044 m_delayedLayout = delay != 0; 2011 m_delayedLayout = delay != 0;
2045 2012
2046 #ifdef INSTRUMENT_LAYOUT_SCHEDULING 2013 #ifdef INSTRUMENT_LAYOUT_SCHEDULING
(...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after
2960 { 2927 {
2961 if (!parent()) 2928 if (!parent())
2962 return 0; 2929 return 0;
2963 2930
2964 if (Frame* parentFrame = m_frame->tree()->parent()) 2931 if (Frame* parentFrame = m_frame->tree()->parent())
2965 return parentFrame->view(); 2932 return parentFrame->view();
2966 2933
2967 return 0; 2934 return 0;
2968 } 2935 }
2969 2936
2970 bool FrameView::isInChildFrameWithFrameFlattening() const
2971 {
2972 if (!parent() || !m_frame->ownerElement())
2973 return false;
2974
2975 // Frame flattening applies when the owner element is either in a frameset o r
2976 // an iframe with flattening parameters.
2977 if (m_frame->ownerElement()->hasTagName(iframeTag)) {
2978 RenderIFrame* iframeRenderer = toRenderIFrame(m_frame->ownerElement()->r enderPart());
2979 if (iframeRenderer->flattenFrame() || iframeRenderer->isSeamless())
2980 return true;
2981 }
2982
2983 if (!m_frame->settings() || !m_frame->settings()->frameFlatteningEnabled())
2984 return false;
2985
2986 if (m_frame->ownerElement()->hasTagName(frameTag))
2987 return true;
2988
2989 return false;
2990 }
2991
2992 bool FrameView::doLayoutWithFrameFlattening(bool allowSubtree)
2993 {
2994 // Try initiating layout from the topmost parent.
2995 FrameView* parentView = parentFrameView();
2996
2997 if (!parentView)
2998 return false;
2999
3000 // In the middle of parent layout, no need to restart from topmost.
3001 if (parentView->m_nestedLayoutCount)
3002 return false;
3003
3004 // Parent tree is clean. Starting layout from it would have no effect.
3005 if (!parentView->needsLayout())
3006 return false;
3007
3008 while (parentView->parentFrameView())
3009 parentView = parentView->parentFrameView();
3010
3011 parentView->layout(allowSubtree);
3012
3013 RenderObject* root = m_layoutRoot ? m_layoutRoot : m_frame->document()->rend erer();
3014 ASSERT_UNUSED(root, !root->needsLayout());
3015
3016 return true;
3017 }
3018
3019 void FrameView::updateControlTints() 2937 void FrameView::updateControlTints()
3020 { 2938 {
3021 // This is called when control tints are changed from aqua/graphite to clear and vice versa. 2939 // This is called when control tints are changed from aqua/graphite to clear and vice versa.
3022 // We do a "fake" paint, and when the theme gets a paint call, it can then d o an invalidate. 2940 // We do a "fake" paint, and when the theme gets a paint call, it can then d o an invalidate.
3023 // This is only done if the theme supports control tinting. It's up to the t heme and platform 2941 // This is only done if the theme supports control tinting. It's up to the t heme and platform
3024 // to define when controls get the tint and to call this function when that changes. 2942 // to define when controls get the tint and to call this function when that changes.
3025 2943
3026 // Optimize the common case where we bring a window to the front while it's still empty. 2944 // Optimize the common case where we bring a window to the front while it's still empty.
3027 if (!m_frame || m_frame->document()->url().isEmpty()) 2945 if (!m_frame || m_frame->document()->url().isEmpty())
3028 return; 2946 return;
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
3210 Vector<RefPtr<FrameView> > frameViews; 3128 Vector<RefPtr<FrameView> > frameViews;
3211 collectFrameViewChildren(this, frameViews); 3129 collectFrameViewChildren(this, frameViews);
3212 3130
3213 const Vector<RefPtr<FrameView> >::iterator end = frameViews.end(); 3131 const Vector<RefPtr<FrameView> >::iterator end = frameViews.end();
3214 for (Vector<RefPtr<FrameView> >::iterator it = frameViews.begin(); it != end ; ++it) 3132 for (Vector<RefPtr<FrameView> >::iterator it = frameViews.begin(); it != end ; ++it)
3215 (*it)->updateLayoutAndStyleIfNeededRecursive(); 3133 (*it)->updateLayoutAndStyleIfNeededRecursive();
3216 3134
3217 // updateLayoutAndStyleIfNeededRecursive is called when we need to make sure style and layout are up-to-date before 3135 // updateLayoutAndStyleIfNeededRecursive is called when we need to make sure style and layout are up-to-date before
3218 // painting, so we need to flush out any deferred repaints too. 3136 // painting, so we need to flush out any deferred repaints too.
3219 flushDeferredRepaints(); 3137 flushDeferredRepaints();
3220
3221 // When frame flattening is on, child frame can mark parent frame dirty. In such case, child frame
ojan 2013/04/16 19:41:09 Also, Mike's patch leaves in this assert for seaml
3222 // needs to call layout on parent frame recursively.
3223 // This assert ensures that parent frames are clean, when child frames finis hed updating layout and style.
3224 ASSERT(!needsLayout());
3225 } 3138 }
3226 3139
3227 void FrameView::enableAutoSizeMode(bool enable, const IntSize& minSize, const In tSize& maxSize) 3140 void FrameView::enableAutoSizeMode(bool enable, const IntSize& minSize, const In tSize& maxSize)
3228 { 3141 {
3229 ASSERT(!enable || !minSize.isEmpty()); 3142 ASSERT(!enable || !minSize.isEmpty());
3230 ASSERT(minSize.width() <= maxSize.width()); 3143 ASSERT(minSize.width() <= maxSize.width());
3231 ASSERT(minSize.height() <= maxSize.height()); 3144 ASSERT(minSize.height() <= maxSize.height());
3232 3145
3233 if (m_shouldAutoSize == enable && m_minAutoSize == minSize && m_maxAutoSize == maxSize) 3146 if (m_shouldAutoSize == enable && m_minAutoSize == minSize && m_maxAutoSize == maxSize)
3234 return; 3147 return;
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
3593 } 3506 }
3594 3507
3595 AXObjectCache* FrameView::axObjectCache() const 3508 AXObjectCache* FrameView::axObjectCache() const
3596 { 3509 {
3597 if (frame() && frame()->document()) 3510 if (frame() && frame()->document())
3598 return frame()->document()->existingAXObjectCache(); 3511 return frame()->document()->existingAXObjectCache();
3599 return 0; 3512 return 0;
3600 } 3513 }
3601 3514
3602 } // namespace WebCore 3515 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/WebCore/page/FrameView.h ('k') | Source/WebCore/page/Settings.in » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698