OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * Copyright (C) 2013 Apple Inc. All rights reserved. | 3 * Copyright (C) 2013 Apple Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 return treeScope1->comparePosition(*treeScope2); | 484 return treeScope1->comparePosition(*treeScope2); |
485 } | 485 } |
486 | 486 |
487 void Internals::pauseAnimations(double pauseTime, ExceptionState& exceptionState
) | 487 void Internals::pauseAnimations(double pauseTime, ExceptionState& exceptionState
) |
488 { | 488 { |
489 if (pauseTime < 0) { | 489 if (pauseTime < 0) { |
490 exceptionState.throwDOMException(InvalidAccessError, ExceptionMessages::
indexExceedsMinimumBound("pauseTime", pauseTime, 0.0)); | 490 exceptionState.throwDOMException(InvalidAccessError, ExceptionMessages::
indexExceedsMinimumBound("pauseTime", pauseTime, 0.0)); |
491 return; | 491 return; |
492 } | 492 } |
493 | 493 |
| 494 if (!frame()) |
| 495 return; |
| 496 |
494 frame()->view()->updateAllLifecyclePhases(); | 497 frame()->view()->updateAllLifecyclePhases(); |
495 frame()->document()->timeline().pauseAnimationsForTesting(pauseTime); | 498 frame()->document()->timeline().pauseAnimationsForTesting(pauseTime); |
496 } | 499 } |
497 | 500 |
498 bool Internals::isCompositedAnimation(Animation* animation) | 501 bool Internals::isCompositedAnimation(Animation* animation) |
499 { | 502 { |
500 return animation->hasActiveAnimationsOnCompositor(); | 503 return animation->hasActiveAnimationsOnCompositor(); |
501 } | 504 } |
502 | 505 |
503 void Internals::disableCompositedAnimation(Animation* animation) | 506 void Internals::disableCompositedAnimation(Animation* animation) |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
772 return document->autofocusElement(); | 775 return document->autofocusElement(); |
773 } | 776 } |
774 | 777 |
775 bool Internals::hasAutofocusRequest() | 778 bool Internals::hasAutofocusRequest() |
776 { | 779 { |
777 return hasAutofocusRequest(0); | 780 return hasAutofocusRequest(0); |
778 } | 781 } |
779 | 782 |
780 Vector<String> Internals::formControlStateOfHistoryItem(ExceptionState& exceptio
nState) | 783 Vector<String> Internals::formControlStateOfHistoryItem(ExceptionState& exceptio
nState) |
781 { | 784 { |
782 HistoryItem* mainItem = frame()->loader().currentItem(); | 785 HistoryItem* mainItem = nullptr; |
| 786 if (frame()) |
| 787 mainItem = frame()->loader().currentItem(); |
783 if (!mainItem) { | 788 if (!mainItem) { |
784 exceptionState.throwDOMException(InvalidAccessError, "No history item is
available."); | 789 exceptionState.throwDOMException(InvalidAccessError, "No history item is
available."); |
785 return Vector<String>(); | 790 return Vector<String>(); |
786 } | 791 } |
787 return mainItem->documentState(); | 792 return mainItem->documentState(); |
788 } | 793 } |
789 | 794 |
790 void Internals::setFormControlStateOfHistoryItem(const Vector<String>& state, Ex
ceptionState& exceptionState) | 795 void Internals::setFormControlStateOfHistoryItem(const Vector<String>& state, Ex
ceptionState& exceptionState) |
791 { | 796 { |
792 HistoryItem* mainItem = frame()->loader().currentItem(); | 797 HistoryItem* mainItem = nullptr; |
| 798 if (frame()) |
| 799 mainItem = frame()->loader().currentItem(); |
793 if (!mainItem) { | 800 if (!mainItem) { |
794 exceptionState.throwDOMException(InvalidAccessError, "No history item is
available."); | 801 exceptionState.throwDOMException(InvalidAccessError, "No history item is
available."); |
795 return; | 802 return; |
796 } | 803 } |
797 mainItem->clearDocumentState(); | 804 mainItem->clearDocumentState(); |
798 mainItem->setDocumentState(state); | 805 mainItem->setDocumentState(state); |
799 } | 806 } |
800 | 807 |
801 DOMWindow* Internals::pagePopupWindow() const | 808 DOMWindow* Internals::pagePopupWindow() const |
802 { | 809 { |
(...skipping 1063 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1866 exceptionState.throwDOMException(InvalidAccessError, document ? "The doc
ument's page cannot be retrieved." : "No context document can be obtained."); | 1873 exceptionState.throwDOMException(InvalidAccessError, document ? "The doc
ument's page cannot be retrieved." : "No context document can be obtained."); |
1867 return; | 1874 return; |
1868 } | 1875 } |
1869 | 1876 |
1870 Page* page = document->page(); | 1877 Page* page = document->page(); |
1871 page->frameHost().setDefaultPageScaleLimits(minScaleFactor, maxScaleFactor); | 1878 page->frameHost().setDefaultPageScaleLimits(minScaleFactor, maxScaleFactor); |
1872 } | 1879 } |
1873 | 1880 |
1874 bool Internals::magnifyScaleAroundAnchor(float scaleFactor, float x, float y) | 1881 bool Internals::magnifyScaleAroundAnchor(float scaleFactor, float x, float y) |
1875 { | 1882 { |
| 1883 if (!frame()) |
| 1884 return false; |
| 1885 |
1876 return frame()->host()->visualViewport().magnifyScaleAroundAnchor(scaleFacto
r, FloatPoint(x, y)); | 1886 return frame()->host()->visualViewport().magnifyScaleAroundAnchor(scaleFacto
r, FloatPoint(x, y)); |
1877 } | 1887 } |
1878 | 1888 |
1879 void Internals::setIsCursorVisible(Document* document, bool isVisible, Exception
State& exceptionState) | 1889 void Internals::setIsCursorVisible(Document* document, bool isVisible, Exception
State& exceptionState) |
1880 { | 1890 { |
1881 ASSERT(document); | 1891 ASSERT(document); |
1882 if (!document->page()) { | 1892 if (!document->page()) { |
1883 exceptionState.throwDOMException(InvalidAccessError, "No context documen
t can be obtained."); | 1893 exceptionState.throwDOMException(InvalidAccessError, "No context documen
t can be obtained."); |
1884 return; | 1894 return; |
1885 } | 1895 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1942 SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(sc
heme); | 1952 SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(sc
heme); |
1943 } | 1953 } |
1944 | 1954 |
1945 TypeConversions* Internals::typeConversions() const | 1955 TypeConversions* Internals::typeConversions() const |
1946 { | 1956 { |
1947 return TypeConversions::create(); | 1957 return TypeConversions::create(); |
1948 } | 1958 } |
1949 | 1959 |
1950 PrivateScriptTest* Internals::privateScriptTest() const | 1960 PrivateScriptTest* Internals::privateScriptTest() const |
1951 { | 1961 { |
| 1962 if (!frame()) |
| 1963 return nullptr; |
| 1964 |
1952 return PrivateScriptTest::create(frame()->document()); | 1965 return PrivateScriptTest::create(frame()->document()); |
1953 } | 1966 } |
1954 | 1967 |
1955 DictionaryTest* Internals::dictionaryTest() const | 1968 DictionaryTest* Internals::dictionaryTest() const |
1956 { | 1969 { |
1957 return DictionaryTest::create(); | 1970 return DictionaryTest::create(); |
1958 } | 1971 } |
1959 | 1972 |
1960 UnionTypesTest* Internals::unionTypesTest() const | 1973 UnionTypesTest* Internals::unionTypesTest() const |
1961 { | 1974 { |
1962 return UnionTypesTest::create(); | 1975 return UnionTypesTest::create(); |
1963 } | 1976 } |
1964 | 1977 |
1965 Vector<String> Internals::getReferencedFilePaths() const | 1978 Vector<String> Internals::getReferencedFilePaths() const |
1966 { | 1979 { |
| 1980 if (!frame()) |
| 1981 return Vector<String>(); |
| 1982 |
1967 return frame()->loader().currentItem()->getReferencedFilePaths(); | 1983 return frame()->loader().currentItem()->getReferencedFilePaths(); |
1968 } | 1984 } |
1969 | 1985 |
1970 void Internals::startTrackingRepaints(Document* document, ExceptionState& except
ionState) | 1986 void Internals::startTrackingRepaints(Document* document, ExceptionState& except
ionState) |
1971 { | 1987 { |
1972 ASSERT(document); | 1988 ASSERT(document); |
1973 if (!document->view()) { | 1989 if (!document->view()) { |
1974 exceptionState.throwDOMException(InvalidAccessError, "The document provi
ded is invalid."); | 1990 exceptionState.throwDOMException(InvalidAccessError, "The document provi
ded is invalid."); |
1975 return; | 1991 return; |
1976 } | 1992 } |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2100 case Cursor::Grabbing: return "Grabbing"; | 2116 case Cursor::Grabbing: return "Grabbing"; |
2101 case Cursor::Custom: return "Custom"; | 2117 case Cursor::Custom: return "Custom"; |
2102 } | 2118 } |
2103 | 2119 |
2104 ASSERT_NOT_REACHED(); | 2120 ASSERT_NOT_REACHED(); |
2105 return "UNKNOWN"; | 2121 return "UNKNOWN"; |
2106 } | 2122 } |
2107 | 2123 |
2108 String Internals::getCurrentCursorInfo() | 2124 String Internals::getCurrentCursorInfo() |
2109 { | 2125 { |
| 2126 if (!frame()) |
| 2127 return String(); |
| 2128 |
2110 Cursor cursor = frame()->page()->chromeClient().lastSetCursorForTesting(); | 2129 Cursor cursor = frame()->page()->chromeClient().lastSetCursorForTesting(); |
2111 | 2130 |
2112 StringBuilder result; | 2131 StringBuilder result; |
2113 result.append("type="); | 2132 result.append("type="); |
2114 result.append(cursorTypeToString(cursor.getType())); | 2133 result.append(cursorTypeToString(cursor.getType())); |
2115 result.append(" hotSpot="); | 2134 result.append(" hotSpot="); |
2116 result.appendNumber(cursor.hotSpot().x()); | 2135 result.appendNumber(cursor.hotSpot().x()); |
2117 result.append(','); | 2136 result.append(','); |
2118 result.appendNumber(cursor.hotSpot().y()); | 2137 result.appendNumber(cursor.hotSpot().y()); |
2119 if (cursor.getImage()) { | 2138 if (cursor.getImage()) { |
2120 IntSize size = cursor.getImage()->size(); | 2139 IntSize size = cursor.getImage()->size(); |
2121 result.append(" image="); | 2140 result.append(" image="); |
2122 result.appendNumber(size.width()); | 2141 result.appendNumber(size.width()); |
2123 result.append('x'); | 2142 result.append('x'); |
2124 result.appendNumber(size.height()); | 2143 result.appendNumber(size.height()); |
2125 } | 2144 } |
2126 if (cursor.imageScaleFactor() != 1) { | 2145 if (cursor.imageScaleFactor() != 1) { |
2127 result.append(" scale="); | 2146 result.append(" scale="); |
2128 NumberToStringBuffer buffer; | 2147 NumberToStringBuffer buffer; |
2129 result.append(numberToFixedPrecisionString(cursor.imageScaleFactor(), 8,
buffer, true)); | 2148 result.append(numberToFixedPrecisionString(cursor.imageScaleFactor(), 8,
buffer, true)); |
2130 } | 2149 } |
2131 | 2150 |
2132 return result.toString(); | 2151 return result.toString(); |
2133 } | 2152 } |
2134 | 2153 |
2135 bool Internals::cursorUpdatePending() const | 2154 bool Internals::cursorUpdatePending() const |
2136 { | 2155 { |
| 2156 if (!frame()) |
| 2157 return false; |
| 2158 |
2137 return frame()->eventHandler().cursorUpdatePending(); | 2159 return frame()->eventHandler().cursorUpdatePending(); |
2138 } | 2160 } |
2139 | 2161 |
2140 DOMArrayBuffer* Internals::serializeObject(PassRefPtr<SerializedScriptValue> val
ue) const | 2162 DOMArrayBuffer* Internals::serializeObject(PassRefPtr<SerializedScriptValue> val
ue) const |
2141 { | 2163 { |
2142 String stringValue = value->toWireString(); | 2164 String stringValue = value->toWireString(); |
2143 DOMArrayBuffer* buffer = DOMArrayBuffer::createUninitialized(stringValue.len
gth(), sizeof(UChar)); | 2165 DOMArrayBuffer* buffer = DOMArrayBuffer::createUninitialized(stringValue.len
gth(), sizeof(UChar)); |
2144 stringValue.copyTo(static_cast<UChar*>(buffer->data()), 0, stringValue.lengt
h()); | 2166 stringValue.copyTo(static_cast<UChar*>(buffer->data()), 0, stringValue.lengt
h()); |
2145 return buffer; | 2167 return buffer; |
2146 } | 2168 } |
2147 | 2169 |
2148 PassRefPtr<SerializedScriptValue> Internals::deserializeBuffer(DOMArrayBuffer* b
uffer) const | 2170 PassRefPtr<SerializedScriptValue> Internals::deserializeBuffer(DOMArrayBuffer* b
uffer) const |
2149 { | 2171 { |
2150 String value(static_cast<const UChar*>(buffer->data()), buffer->byteLength()
/ sizeof(UChar)); | 2172 String value(static_cast<const UChar*>(buffer->data()), buffer->byteLength()
/ sizeof(UChar)); |
2151 return SerializedScriptValue::create(value); | 2173 return SerializedScriptValue::create(value); |
2152 } | 2174 } |
2153 | 2175 |
2154 void Internals::forceReload(bool bypassCache) | 2176 void Internals::forceReload(bool bypassCache) |
2155 { | 2177 { |
| 2178 if (!frame()) |
| 2179 return; |
| 2180 |
2156 frame()->reload(bypassCache ? FrameLoadTypeReloadBypassingCache : FrameLoadT
ypeReload, ClientRedirectPolicy::NotClientRedirect); | 2181 frame()->reload(bypassCache ? FrameLoadTypeReloadBypassingCache : FrameLoadT
ypeReload, ClientRedirectPolicy::NotClientRedirect); |
2157 } | 2182 } |
2158 | 2183 |
2159 ClientRect* Internals::selectionBounds(ExceptionState& exceptionState) | 2184 ClientRect* Internals::selectionBounds(ExceptionState& exceptionState) |
2160 { | 2185 { |
2161 Document* document = contextDocument(); | 2186 Document* document = contextDocument(); |
2162 if (!document || !document->frame()) { | 2187 if (!document || !document->frame()) { |
2163 exceptionState.throwDOMException(InvalidAccessError, document ? "The doc
ument's frame cannot be retrieved." : "No context document can be obtained."); | 2188 exceptionState.throwDOMException(InvalidAccessError, document ? "The doc
ument's frame cannot be retrieved." : "No context document can be obtained."); |
2164 return nullptr; | 2189 return nullptr; |
2165 } | 2190 } |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2248 if (document->layoutViewItem().isNull()) { | 2273 if (document->layoutViewItem().isNull()) { |
2249 exceptionState.throwDOMException(InvalidAccessError, "The document provi
ded is invalid."); | 2274 exceptionState.throwDOMException(InvalidAccessError, "The document provi
ded is invalid."); |
2250 return; | 2275 return; |
2251 } | 2276 } |
2252 | 2277 |
2253 document->frame()->view()->updateAllLifecyclePhases(); | 2278 document->frame()->view()->updateAllLifecyclePhases(); |
2254 } | 2279 } |
2255 | 2280 |
2256 void Internals::setZoomFactor(float factor) | 2281 void Internals::setZoomFactor(float factor) |
2257 { | 2282 { |
| 2283 if (!frame()) |
| 2284 return; |
| 2285 |
2258 frame()->setPageZoomFactor(factor); | 2286 frame()->setPageZoomFactor(factor); |
2259 } | 2287 } |
2260 | 2288 |
2261 void Internals::setShouldRevealPassword(Element* element, bool reveal, Exception
State& exceptionState) | 2289 void Internals::setShouldRevealPassword(Element* element, bool reveal, Exception
State& exceptionState) |
2262 { | 2290 { |
2263 ASSERT(element); | 2291 ASSERT(element); |
2264 if (!isHTMLInputElement(element)) { | 2292 if (!isHTMLInputElement(element)) { |
2265 exceptionState.throwDOMException(InvalidNodeTypeError, "The element prov
ided is not an INPUT."); | 2293 exceptionState.throwDOMException(InvalidNodeTypeError, "The element prov
ided is not an INPUT."); |
2266 return; | 2294 return; |
2267 } | 2295 } |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2365 { | 2393 { |
2366 if (!node || !node->layoutObject()) | 2394 if (!node || !node->layoutObject()) |
2367 return String(); | 2395 return String(); |
2368 blink::WebPoint point(x, y); | 2396 blink::WebPoint point(x, y); |
2369 SurroundingText surroundingText(createVisiblePosition(node->layoutObject()->
positionForPoint(static_cast<IntPoint>(point))).deepEquivalent().parentAnchoredE
quivalent(), maxLength); | 2397 SurroundingText surroundingText(createVisiblePosition(node->layoutObject()->
positionForPoint(static_cast<IntPoint>(point))).deepEquivalent().parentAnchoredE
quivalent(), maxLength); |
2370 return surroundingText.content(); | 2398 return surroundingText.content(); |
2371 } | 2399 } |
2372 | 2400 |
2373 void Internals::setFocused(bool focused) | 2401 void Internals::setFocused(bool focused) |
2374 { | 2402 { |
| 2403 if (!frame()) |
| 2404 return; |
| 2405 |
2375 frame()->page()->focusController().setFocused(focused); | 2406 frame()->page()->focusController().setFocused(focused); |
2376 } | 2407 } |
2377 | 2408 |
2378 void Internals::setInitialFocus(bool reverse) | 2409 void Internals::setInitialFocus(bool reverse) |
2379 { | 2410 { |
| 2411 if (!frame()) |
| 2412 return; |
| 2413 |
2380 frame()->document()->clearFocusedElement(); | 2414 frame()->document()->clearFocusedElement(); |
2381 frame()->page()->focusController().setInitialFocus(reverse ? WebFocusTypeBac
kward : WebFocusTypeForward); | 2415 frame()->page()->focusController().setInitialFocus(reverse ? WebFocusTypeBac
kward : WebFocusTypeForward); |
2382 } | 2416 } |
2383 | 2417 |
2384 bool Internals::ignoreLayoutWithPendingStylesheets(Document* document) | 2418 bool Internals::ignoreLayoutWithPendingStylesheets(Document* document) |
2385 { | 2419 { |
2386 ASSERT(document); | 2420 ASSERT(document); |
2387 return document->ignoreLayoutWithPendingStylesheets(); | 2421 return document->ignoreLayoutWithPendingStylesheets(); |
2388 } | 2422 } |
2389 | 2423 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2446 scrollState->setScrollChain(scrollChain); | 2480 scrollState->setScrollChain(scrollChain); |
2447 } | 2481 } |
2448 | 2482 |
2449 void Internals::forceBlinkGCWithoutV8GC() | 2483 void Internals::forceBlinkGCWithoutV8GC() |
2450 { | 2484 { |
2451 ThreadState::current()->setGCState(ThreadState::FullGCScheduled); | 2485 ThreadState::current()->setGCState(ThreadState::FullGCScheduled); |
2452 } | 2486 } |
2453 | 2487 |
2454 String Internals::selectedHTMLForClipboard() | 2488 String Internals::selectedHTMLForClipboard() |
2455 { | 2489 { |
| 2490 if (!frame()) |
| 2491 return String(); |
| 2492 |
2456 return frame()->selection().selectedHTMLForClipboard(); | 2493 return frame()->selection().selectedHTMLForClipboard(); |
2457 } | 2494 } |
2458 | 2495 |
2459 String Internals::selectedTextForClipboard() | 2496 String Internals::selectedTextForClipboard() |
2460 { | 2497 { |
| 2498 if (!frame()) |
| 2499 return String(); |
| 2500 |
2461 return frame()->selection().selectedTextForClipboard(); | 2501 return frame()->selection().selectedTextForClipboard(); |
2462 } | 2502 } |
2463 | 2503 |
2464 void Internals::setVisualViewportOffset(int x, int y) | 2504 void Internals::setVisualViewportOffset(int x, int y) |
2465 { | 2505 { |
| 2506 if (!frame()) |
| 2507 return; |
| 2508 |
2466 frame()->host()->visualViewport().setLocation(FloatPoint(x, y)); | 2509 frame()->host()->visualViewport().setLocation(FloatPoint(x, y)); |
2467 } | 2510 } |
2468 | 2511 |
2469 int Internals::visualViewportHeight() | 2512 int Internals::visualViewportHeight() |
2470 { | 2513 { |
| 2514 if (!frame()) |
| 2515 return 0; |
| 2516 |
2471 return expandedIntSize(frame()->host()->visualViewport().visibleRect().size(
)).height(); | 2517 return expandedIntSize(frame()->host()->visualViewport().visibleRect().size(
)).height(); |
2472 } | 2518 } |
2473 | 2519 |
2474 int Internals::visualViewportWidth() | 2520 int Internals::visualViewportWidth() |
2475 { | 2521 { |
| 2522 if (!frame()) |
| 2523 return 0; |
| 2524 |
2476 return expandedIntSize(frame()->host()->visualViewport().visibleRect().size(
)).width(); | 2525 return expandedIntSize(frame()->host()->visualViewport().visibleRect().size(
)).width(); |
2477 } | 2526 } |
2478 | 2527 |
2479 double Internals::visualViewportScrollX() | 2528 double Internals::visualViewportScrollX() |
2480 { | 2529 { |
| 2530 if (!frame()) |
| 2531 return 0; |
| 2532 |
2481 return frame()->view()->getScrollableArea()->scrollPositionDouble().x(); | 2533 return frame()->view()->getScrollableArea()->scrollPositionDouble().x(); |
2482 } | 2534 } |
2483 | 2535 |
2484 double Internals::visualViewportScrollY() | 2536 double Internals::visualViewportScrollY() |
2485 { | 2537 { |
| 2538 if (!frame()) |
| 2539 return 0; |
| 2540 |
2486 return frame()->view()->getScrollableArea()->scrollPositionDouble().y(); | 2541 return frame()->view()->getScrollableArea()->scrollPositionDouble().y(); |
2487 } | 2542 } |
2488 | 2543 |
2489 ValueIterable<int>::IterationSource* Internals::startIteration(ScriptState*, Exc
eptionState&) | 2544 ValueIterable<int>::IterationSource* Internals::startIteration(ScriptState*, Exc
eptionState&) |
2490 { | 2545 { |
2491 return new InternalsIterationSource(); | 2546 return new InternalsIterationSource(); |
2492 } | 2547 } |
2493 | 2548 |
2494 bool Internals::isUseCounted(Document* document, int useCounterId) | 2549 bool Internals::isUseCounted(Document* document, int useCounterId) |
2495 { | 2550 { |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2575 } | 2630 } |
2576 | 2631 |
2577 String Internals::getProgrammaticScrollAnimationState(Node* node) const | 2632 String Internals::getProgrammaticScrollAnimationState(Node* node) const |
2578 { | 2633 { |
2579 if (ScrollableArea* scrollableArea = scrollableAreaForNode(node)) | 2634 if (ScrollableArea* scrollableArea = scrollableAreaForNode(node)) |
2580 return scrollableArea->programmaticScrollAnimator().runStateAsText(); | 2635 return scrollableArea->programmaticScrollAnimator().runStateAsText(); |
2581 return String(); | 2636 return String(); |
2582 } | 2637 } |
2583 | 2638 |
2584 } // namespace blink | 2639 } // namespace blink |
OLD | NEW |