15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved.
3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2013 Apple Inc. All rights reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "Internals.h"
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "HTMLNames.h"
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "InspectorFrontendClientLocal.h"
32e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "InternalProfilers.h"
3381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "InternalRuntimeFlags.h"
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "InternalSettings.h"
357757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "LayerRect.h"
367757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "LayerRectList.h"
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "MallocStatistics.h"
38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include "MockPagePopupDriver.h"
3981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "RuntimeEnabledFeatures.h"
40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include "TypeConversions.h"
41df95704c49daea886ddad70775bda23618d6274dBen Murdoch#include "bindings/v8/ExceptionState.h"
4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/SerializedScriptValue.h"
43f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "bindings/v8/V8ThrowException.h"
4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/StyleSheetContents.h"
457757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "core/css/resolver/StyleResolver.h"
467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "core/css/resolver/ViewportStyleResolver.h"
4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ClientRect.h"
4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ClientRectList.h"
4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DOMStringList.h"
5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h"
5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentMarker.h"
5253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentMarkerController.h"
5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Element.h"
5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ExceptionCode.h"
55f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/dom/FullscreenElementStack.h"
5653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/NodeRenderingContext.h"
5753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/PseudoElement.h"
5853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Range.h"
5953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/StaticNodeList.h"
6053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/TreeScope.h"
6153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ViewportArguments.h"
62e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ComposedShadowTreeWalker.h"
63e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ContentDistributor.h"
64e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ElementShadow.h"
65e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/SelectRuleFeatureSet.h"
66e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ShadowRoot.h"
6753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/Editor.h"
6853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/SpellChecker.h"
6953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/TextIterator.h"
7053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/history/BackForwardController.h"
7153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/history/HistoryItem.h"
7253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/FormController.h"
7353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLInputElement.h"
7453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLMediaElement.h"
7553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLSelectElement.h"
7653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLTextAreaElement.h"
7753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/shadow/HTMLContentElement.h"
7853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorClient.h"
7953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorConsoleAgent.h"
8053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorController.h"
8153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorCounters.h"
8253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorFrontendChannel.h"
8353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorInstrumentation.h"
8453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorOverlay.h"
8553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InstrumentingAgents.h"
8653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoader.h"
8753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/cache/MemoryCache.h"
883464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch#include "core/loader/cache/ResourceFetcher.h"
8953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Chrome.h"
9053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/ChromeClient.h"
9153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/DOMPoint.h"
9253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/DOMWindow.h"
9353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/EventHandler.h"
9453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Frame.h"
9553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FrameView.h"
9653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h"
97f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/page/PagePopupController.h"
9853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/PrintContext.h"
9953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Settings.h"
10053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/animation/AnimationController.h"
10153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/scrolling/ScrollingCoordinator.h"
1025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "core/platform/ColorChooser.h"
10353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/Cursor.h"
10453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/Language.h"
105f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/platform/chromium/TraceEvent.h"
106f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/platform/graphics/GraphicsLayer.h"
10753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/IntRect.h"
108f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/platform/graphics/filters/FilterOperation.h"
109f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/platform/graphics/filters/FilterOperations.h"
110fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch#include "core/platform/graphics/gpu/SharedGraphicsContext3D.h"
111f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/platform/mock/PlatformSpeechSynthesizerMock.h"
112f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/rendering/RenderLayerBacking.h"
11353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderMenuList.h"
11453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderObject.h"
11553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTreeAsText.h"
11653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderView.h"
117f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/testing/GCObservation.h"
11853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/workers/WorkerThread.h"
119f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "modules/speech/DOMWindowSpeechSynthesis.h"
120f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "modules/speech/SpeechSynthesis.h"
121e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "weborigin/SchemeRegistry.h"
12281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "wtf/dtoa.h"
12381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "wtf/text/StringBuffer.h"
124f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include <v8.h>
125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static MockPagePopupDriver* s_pagePopupDriver = 0;
129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames;
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InspectorFrontendChannelDummy : public InspectorFrontendChannel {
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit InspectorFrontendChannelDummy(Page*);
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~InspectorFrontendChannelDummy() { }
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual bool sendMessageToFrontend(const String& message) OVERRIDE;
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page* m_frontendPage;
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)InspectorFrontendChannelDummy::InspectorFrontendChannelDummy(Page* page)
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : m_frontendPage(page)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool InspectorFrontendChannelDummy::sendMessageToFrontend(const String& message)
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return InspectorClient::doDispatchMessageOnFrontendPage(m_frontendPage, message);
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static bool markerTypesFrom(const String& markerType, DocumentMarker::MarkerTypes& result)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (markerType.isEmpty() || equalIgnoringCase(markerType, "all"))
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result = DocumentMarker::AllMarkers();
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else if (equalIgnoringCase(markerType, "Spelling"))
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result =  DocumentMarker::Spelling;
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else if (equalIgnoringCase(markerType, "Grammar"))
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result =  DocumentMarker::Grammar;
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else if (equalIgnoringCase(markerType, "TextMatch"))
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result =  DocumentMarker::TextMatch;
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static SpellChecker* spellchecker(Document* document)
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame() || !document->frame()->editor())
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return document->frame()->editor()->spellChecker();
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const char* Internals::internalsId = "internals";
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<Internals> Internals::create(Document* document)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return adoptRef(new Internals(document));
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Internals::~Internals()
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1857757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    if (m_scrollingCoordinator) {
1867757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        m_scrollingCoordinator->removeTouchEventTargetRectsObserver(this);
1877757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    }
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::resetToConsistentState(Page* page)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(page);
193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
194e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    page->setDeviceScaleFactor(1);
195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    page->setPageScaleFactor(1, IntPoint(0, 0));
196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    page->setPagination(Pagination());
197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    TextRun::setAllowsRoundingHacks(false);
198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebCore::overrideUserPreferredLanguages(Vector<String>());
199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebCore::Settings::setUsesOverlayScrollbars(false);
200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    delete s_pagePopupDriver;
201926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    s_pagePopupDriver = 0;
20293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    page->chrome().client()->resetPagePopupDriver();
203926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!page->mainFrame()->editor()->isContinuousSpellCheckingEnabled())
204926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        page->mainFrame()->editor()->toggleContinuousSpellChecking();
20553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (page->mainFrame()->editor()->isOverwriteModeEnabled())
20653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        page->mainFrame()->editor()->toggleOverwriteModeEnabled();
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Internals::Internals(Document* document)
210591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    : ContextLifecycleObserver(document)
21181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    , m_runtimeFlags(InternalRuntimeFlags::create())
2120390b6f38fb8c48e6cda11a37640b83a6cbca5bdTorne (Richard Coles)    , m_scrollingCoordinator(document->page() ? document->page()->scrollingCoordinator() : 0)
2137757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    , m_touchEventTargetRectUpdateCount(0)
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2157757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    if (m_scrollingCoordinator) {
2167757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        m_scrollingCoordinator->addTouchEventTargetRectsObserver(this);
2177757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    }
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Document* Internals::contextDocument() const
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return toDocument(scriptExecutionContext());
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Frame* Internals::frame() const
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!contextDocument())
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return contextDocument()->frame();
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)InternalSettings* Internals::settings() const
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Document* document = contextDocument();
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document)
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page* page = document->page();
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!page)
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return InternalSettings::from(page);
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
24381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)InternalRuntimeFlags* Internals::runtimeFlags() const
24481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles){
24581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    return m_runtimeFlags.get();
24681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)}
24781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
248e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochInternalProfilers* Internals::profilers()
249e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{
250e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    if (!m_profilers)
251e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        m_profilers = InternalProfilers::create();
252e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    return m_profilers.get();
253e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}
254e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)unsigned Internals::workerThreadCount() const
256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return WorkerThread::workerThreadCount();
258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String Internals::address(Node* node)
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    char buf[32];
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    sprintf(buf, "%p", node);
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return String(buf);
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
268f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)PassRefPtr<GCObservation> Internals::observeGC(ScriptValue scriptValue)
269f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){
270f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    v8::Handle<v8::Value> observedValue = scriptValue.v8Value();
271f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    ASSERT(!observedValue.IsEmpty());
272f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    if (observedValue->IsNull() || observedValue->IsUndefined()) {
273f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)        V8ThrowException::throwTypeError("value to observe is null or undefined", v8::Isolate::GetCurrent());
274f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)        return 0;
275f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    }
276f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
277f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    return GCObservation::create(observedValue);
278f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)}
279f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool Internals::isPreloaded(const String& url)
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Document* document = contextDocument();
2833464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch    return document->fetcher()->isPreloaded(url);
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool Internals::isLoadingFromMemoryCache(const String& url)
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!contextDocument())
289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return false;
290fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    Resource* resource = memoryCache()->resourceForURL(contextDocument()->completeURL(url));
291fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    return resource && resource->status() == Resource::Cached;
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Internals::crash()
29553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
29653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    CRASH();
29753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
29853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
299df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<Element> Internals::createContentElement(ExceptionState& es)
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Document* document = contextDocument();
302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document) {
303df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return HTMLContentElement::create(document);
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
310df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::isValidContentSelect(Element* insertionPoint, ExceptionState& es)
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!insertionPoint || !insertionPoint->isInsertionPoint()) {
313df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return isHTMLContentElement(insertionPoint) && toHTMLContentElement(insertionPoint)->isSelectValid();
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
320df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::treeScopeRootNode(Node* node, ExceptionState& es)
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
323df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return node->treeScope()->rootNode();
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
330df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::parentTreeScope(Node* node, ExceptionState& es)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
333df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const TreeScope* parentTreeScope = node->treeScope()->parentTreeScope();
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return parentTreeScope ? parentTreeScope->rootNode() : 0;
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
340df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::hasSelectorForIdInShadow(Element* host, const String& idValue, ExceptionState& es)
341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!host || !host->shadow()) {
343df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return host->shadow()->distributor().ensureSelectFeatureSet(host->shadow()).hasSelectorForId(idValue);
348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
350df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::hasSelectorForClassInShadow(Element* host, const String& className, ExceptionState& es)
351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!host || !host->shadow()) {
353df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return host->shadow()->distributor().ensureSelectFeatureSet(host->shadow()).hasSelectorForClass(className);
358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
360df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::hasSelectorForAttributeInShadow(Element* host, const String& attributeName, ExceptionState& es)
361926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!host || !host->shadow()) {
363df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return host->shadow()->distributor().ensureSelectFeatureSet(host->shadow()).hasSelectorForAttribute(attributeName);
368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
370df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::hasSelectorForPseudoClassInShadow(Element* host, const String& pseudoClass, ExceptionState& es)
371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!host || !host->shadow()) {
373df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    const SelectRuleFeatureSet& featureSet = host->shadow()->distributor().ensureSelectFeatureSet(host->shadow());
378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (pseudoClass == "checked")
379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return featureSet.hasSelectorForChecked();
380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (pseudoClass == "enabled")
381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return featureSet.hasSelectorForEnabled();
382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (pseudoClass == "disabled")
383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return featureSet.hasSelectorForDisabled();
384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (pseudoClass == "indeterminate")
385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return featureSet.hasSelectorForIndeterminate();
386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (pseudoClass == "link")
387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return featureSet.hasSelectorForLink();
388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (pseudoClass == "target")
389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return featureSet.hasSelectorForTarget();
390926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (pseudoClass == "visited")
391926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return featureSet.hasSelectorForVisited();
392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
393926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ASSERT_NOT_REACHED();
394926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return false;
395926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
397df95704c49daea886ddad70775bda23618d6274dBen Murdochunsigned short Internals::compareTreeScopePosition(const Node* node1, const Node* node2, ExceptionState& es) const
3985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){
3995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (!node1 || !node2) {
400df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
4015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return 0;
4025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    }
4035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    const TreeScope* treeScope1 = node1->isDocumentNode() ? static_cast<const TreeScope*>(toDocument(node1)) :
4045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        node1->isShadowRoot() ? static_cast<const TreeScope*>(toShadowRoot(node1)) : 0;
4055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    const TreeScope* treeScope2 = node2->isDocumentNode() ? static_cast<const TreeScope*>(toDocument(node2)) :
4065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        node2->isShadowRoot() ? static_cast<const TreeScope*>(toShadowRoot(node2)) : 0;
4075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (!treeScope1 || !treeScope2) {
408df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
4095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return 0;
4105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    }
4115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    return treeScope1->comparePosition(treeScope2);
4125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}
4135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
414926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)unsigned Internals::numberOfActiveAnimations() const
415926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
416926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Frame* contextFrame = frame();
417e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    if (!RuntimeEnabledFeatures::webAnimationsCSSEnabled()) {
418e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        if (AnimationController* controller = contextFrame->animation())
419e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            return controller->numberOfActiveAnimations(contextFrame->document());
420e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    }
421926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return 0;
422926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
423926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
424df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::suspendAnimations(Document* document, ExceptionState& es) const
425926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
426926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document || !document->frame()) {
427df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
428926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
429926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
430926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
431e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    if (!RuntimeEnabledFeatures::webAnimationsCSSEnabled()) {
432e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        AnimationController* controller = document->frame()->animation();
433e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        if (!controller)
434e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            return;
435926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
436e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        controller->suspendAnimations();
437e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    }
438926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
439926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
440df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::resumeAnimations(Document* document, ExceptionState& es) const
441926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
442926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document || !document->frame()) {
443df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
444926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
445926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
446926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
447e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    if (!RuntimeEnabledFeatures::webAnimationsCSSEnabled()) {
448e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        AnimationController* controller = document->frame()->animation();
449e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        if (!controller)
450e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            return;
451926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
452e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        controller->resumeAnimations();
453e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    }
454926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
455926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
456df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::pauseAnimations(double pauseTime, ExceptionState& es)
457926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
45881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    if (pauseTime < 0) {
459df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
46081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)        return;
461926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
462926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
463e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    if (!RuntimeEnabledFeatures::webAnimationsCSSEnabled())
464e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        frame()->animation()->pauseAnimationsForTesting(pauseTime);
465926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
466926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
467df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::hasShadowInsertionPoint(const Node* root, ExceptionState& es) const
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (root && root->isShadowRoot())
47083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch        return toShadowRoot(root)->containsShadowElements();
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
472df95704c49daea886ddad70775bda23618d6274dBen Murdoch    es.throwDOMException(InvalidAccessError);
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
476df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::hasContentElement(const Node* root, ExceptionState& es) const
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (root && root->isShadowRoot())
47983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch        return toShadowRoot(root)->containsContentElements();
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
481df95704c49daea886ddad70775bda23618d6274dBen Murdoch    es.throwDOMException(InvalidAccessError);
4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485df95704c49daea886ddad70775bda23618d6274dBen Murdochsize_t Internals::countElementShadow(const Node* root, ExceptionState& es) const
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!root || !root->isShadowRoot()) {
488df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
49183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch    if (const ScopeContentDistribution* distribution = toShadowRoot(root)->scopeDistribution())
49283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch        return distribution->numberOfElementShadowChildren();
49383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch    return 0;
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
496df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::attached(Node* node, ExceptionState& es)
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
499df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return node->attached();
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
506df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::nextSiblingByWalker(Node* node, ExceptionState& es)
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
509df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ComposedShadowTreeWalker walker(node);
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    walker.nextSibling();
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return walker.get();
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
517df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::firstChildByWalker(Node* node, ExceptionState& es)
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
520df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ComposedShadowTreeWalker walker(node);
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    walker.firstChild();
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return walker.get();
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
528df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::lastChildByWalker(Node* node, ExceptionState& es)
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
531df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ComposedShadowTreeWalker walker(node);
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    walker.lastChild();
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return walker.get();
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
539df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::nextNodeByWalker(Node* node, ExceptionState& es)
5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
542df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ComposedShadowTreeWalker walker(node);
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    walker.next();
5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return walker.get();
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
550df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::previousNodeByWalker(Node* node, ExceptionState& es)
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
553df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ComposedShadowTreeWalker walker(node);
5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    walker.previous();
5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return walker.get();
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
561df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::elementRenderTreeAsText(Element* element, ExceptionState& es)
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element) {
564df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String representation = externalRepresentation(element);
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (representation.isEmpty()) {
570df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return representation;
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
577df95704c49daea886ddad70775bda23618d6274dBen Murdochsize_t Internals::numberOfScopedHTMLStyleChildren(const Node* scope, ExceptionState& es) const
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (scope && (scope->isElementNode() || scope->isShadowRoot()))
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return scope->numberOfScopedHTMLStyleChildren();
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
582df95704c49daea886ddad70775bda23618d6274dBen Murdoch    es.throwDOMException(InvalidAccessError);
5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
586df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<CSSComputedStyleDeclaration> Internals::computedStyleIncludingVisitedInfo(Node* node, ExceptionState& es) const
587926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
588926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!node) {
589df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
590926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
591926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
592926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
593926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    bool allowVisitedStyle = true;
594926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return CSSComputedStyleDeclaration::create(node, allowVisitedStyle);
595926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
596926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
597df95704c49daea886ddad70775bda23618d6274dBen MurdochShadowRoot* Internals::ensureShadowRoot(Element* host, ExceptionState& es)
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!host) {
600df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (ElementShadow* shadow = host->shadow())
6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return shadow->youngestShadowRoot();
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
607df95704c49daea886ddad70775bda23618d6274dBen Murdoch    return host->createShadowRoot(es).get();
608926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
609926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
610df95704c49daea886ddad70775bda23618d6274dBen MurdochShadowRoot* Internals::shadowRoot(Element* host, ExceptionState& es)
6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: Internals::shadowRoot() in tests should be converted to youngestShadowRoot() or oldestShadowRoot().
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // https://bugs.webkit.org/show_bug.cgi?id=78465
614df95704c49daea886ddad70775bda23618d6274dBen Murdoch    return youngestShadowRoot(host, es);
6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
617df95704c49daea886ddad70775bda23618d6274dBen MurdochShadowRoot* Internals::youngestShadowRoot(Element* host, ExceptionState& es)
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!host) {
620df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (ElementShadow* shadow = host->shadow())
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return shadow->youngestShadowRoot();
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
629df95704c49daea886ddad70775bda23618d6274dBen MurdochShadowRoot* Internals::oldestShadowRoot(Element* host, ExceptionState& es)
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!host) {
632df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (ElementShadow* shadow = host->shadow())
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return shadow->oldestShadowRoot();
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
641df95704c49daea886ddad70775bda23618d6274dBen MurdochShadowRoot* Internals::youngerShadowRoot(Node* shadow, ExceptionState& es)
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!shadow || !shadow->isShadowRoot()) {
644df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return toShadowRoot(shadow)->youngerShadowRoot();
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
651df95704c49daea886ddad70775bda23618d6274dBen MurdochShadowRoot* Internals::olderShadowRoot(Node* shadow, ExceptionState& es)
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!shadow || !shadow->isShadowRoot()) {
654df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return toShadowRoot(shadow)->olderShadowRoot();
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
661df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::shadowRootType(const Node* root, ExceptionState& es) const
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!root || !root->isShadowRoot()) {
664df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (toShadowRoot(root)->type()) {
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case ShadowRoot::UserAgentShadowRoot:
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String("UserAgentShadowRoot");
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case ShadowRoot::AuthorShadowRoot:
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String("AuthorShadowRoot");
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    default:
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ASSERT_NOT_REACHED();
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String("Unknown");
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
679df95704c49daea886ddad70775bda23618d6274dBen MurdochElement* Internals::includerFor(Node* node, ExceptionState& es)
6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
682df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6863464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch    NodeRenderingTraversal::ParentDetails parentDetails;
6873464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch    NodeRenderingTraversal::parent(node, &parentDetails);
6883464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch    return parentDetails.insertionPoint();
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
691df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::shadowPseudoId(Element* element, ExceptionState& es)
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element) {
694df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return element->shadowPseudoId().string();
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
701df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setShadowPseudoId(Element* element, const String& id, ExceptionState& es)
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element) {
704df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
708e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    return element->setPart(id);
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String Internals::visiblePlaceholder(Element* element)
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
713926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (element && isHTMLTextFormControlElement(element)) {
714926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (toHTMLTextFormControlElement(element)->placeholderShouldBeVisible())
715926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return toHTMLTextFormControlElement(element)->placeholderElement()->textContent();
716926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
717926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return String();
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::selectColorInColorChooser(Element* element, const String& colorValue)
7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element->hasTagName(inputTag))
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
72583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch    toHTMLInputElement(element)->selectColorInColorChooser(StyleColor(colorValue).color());
7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
728df95704c49daea886ddad70775bda23618d6274dBen MurdochVector<String> Internals::formControlStateOfPreviousHistoryItem(ExceptionState& es)
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    HistoryItem* mainItem = frame()->loader()->history()->previousItem();
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!mainItem) {
732df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
733926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return Vector<String>();
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String uniqueName = frame()->tree()->uniqueName();
7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (mainItem->target() != uniqueName && !mainItem->childItemWithTarget(uniqueName)) {
737df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
738926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return Vector<String>();
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
740926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return mainItem->target() == uniqueName ? mainItem->documentState() : mainItem->childItemWithTarget(uniqueName)->documentState();
7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
743df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setFormControlStateOfPreviousHistoryItem(const Vector<String>& state, ExceptionState& es)
7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    HistoryItem* mainItem = frame()->loader()->history()->previousItem();
746926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!mainItem) {
747df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String uniqueName = frame()->tree()->uniqueName();
7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (mainItem->target() == uniqueName)
752926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        mainItem->setDocumentState(state);
7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else if (HistoryItem* subItem = mainItem->childItemWithTarget(uniqueName))
754926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        subItem->setDocumentState(state);
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
756df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
759926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void Internals::enableMockSpeechSynthesizer()
760926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
761926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Document* document = contextDocument();
762926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document || !document->domWindow())
763926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
764926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    SpeechSynthesis* synthesis = DOMWindowSpeechSynthesis::speechSynthesis(document->domWindow());
765926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!synthesis)
766926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
76753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
768926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    synthesis->setPlatformSynthesizer(PlatformSpeechSynthesizerMock::create(synthesis));
769926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
77053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
771df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setEnableMockPagePopup(bool enabled, ExceptionState& es)
772926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
773926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Document* document = contextDocument();
77493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (!document || !document->page())
775926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
776926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Page* page = document->page();
777926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!enabled) {
77893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        page->chrome().client()->resetPagePopupDriver();
779926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
780926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
781926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!s_pagePopupDriver)
782926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        s_pagePopupDriver = MockPagePopupDriver::create(page->mainFrame()).leakPtr();
78393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    page->chrome().client()->setPagePopupDriver(s_pagePopupDriver);
784926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
785926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<PagePopupController> Internals::pagePopupController()
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
788926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return s_pagePopupDriver ? s_pagePopupDriver->pagePopupController() : 0;
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
791df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<ClientRect> Internals::absoluteCaretBounds(ExceptionState& es)
7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
793926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Document* document = contextDocument();
7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame() || !document->frame()->selection()) {
795df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return ClientRect::create();
7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return ClientRect::create(document->frame()->selection()->absoluteCaretBounds());
8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
802df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<ClientRect> Internals::boundingBox(Element* element, ExceptionState& es)
8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element) {
805df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return ClientRect::create();
8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    element->document()->updateLayoutIgnorePendingStylesheets();
8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RenderObject* renderer = element->renderer();
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!renderer)
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return ClientRect::create();
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return ClientRect::create(renderer->absoluteBoundingBoxRectIgnoringTransforms());
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
816df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<ClientRectList> Internals::inspectorHighlightRects(Document* document, ExceptionState& es)
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->page() || !document->page()->inspectorController()) {
819df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return ClientRectList::create();
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Highlight highlight;
8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    document->page()->inspectorController()->getHighlight(&highlight);
8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return ClientRectList::create(highlight.quads);
8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
828df95704c49daea886ddad70775bda23618d6274dBen Murdochunsigned Internals::markerCountForNode(Node* node, const String& markerType, ExceptionState& es)
8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
831df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentMarker::MarkerTypes markerTypes = 0;
8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!markerTypesFrom(markerType, markerTypes)) {
837df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(SyntaxError);
8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return node->document()->markers()->markersFor(node, markerTypes).size();
8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
844df95704c49daea886ddad70775bda23618d6274dBen MurdochDocumentMarker* Internals::markerAt(Node* node, const String& markerType, unsigned index, ExceptionState& es)
8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node) {
847df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentMarker::MarkerTypes markerTypes = 0;
8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!markerTypesFrom(markerType, markerTypes)) {
853df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(SyntaxError);
8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Vector<DocumentMarker*> markers = node->document()->markers()->markersFor(node, markerTypes);
8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (markers.size() <= index)
8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return markers[index];
8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
863df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<Range> Internals::markerRangeForNode(Node* node, const String& markerType, unsigned index, ExceptionState& es)
8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
865df95704c49daea886ddad70775bda23618d6274dBen Murdoch    DocumentMarker* marker = markerAt(node, markerType, index, es);
8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!marker)
8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return Range::create(node->document(), node, marker->startOffset(), node, marker->endOffset());
8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
871df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::markerDescriptionForNode(Node* node, const String& markerType, unsigned index, ExceptionState& es)
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
873df95704c49daea886ddad70775bda23618d6274dBen Murdoch    DocumentMarker* marker = markerAt(node, markerType, index, es);
8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!marker)
8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return marker->description();
8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::addTextMatchMarker(const Range* range, bool isActive)
8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    range->ownerDocument()->updateLayoutIgnorePendingStylesheets();
8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    range->ownerDocument()->markers()->addTextMatchMarker(range, isActive);
8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setScrollViewPosition(Document* document, long x, long y, ExceptionState& es)
8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->view()) {
888df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameView* frameView = document->view();
8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool constrainsScrollingToContentEdgeOldValue = frameView->constrainsScrollingToContentEdge();
8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool scrollbarsSuppressedOldValue = frameView->scrollbarsSuppressed();
8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->setConstrainsScrollingToContentEdge(false);
8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->setScrollbarsSuppressed(false);
8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->setScrollOffsetFromInternals(IntPoint(x, y));
8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->setScrollbarsSuppressed(scrollbarsSuppressedOldValue);
9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->setConstrainsScrollingToContentEdge(constrainsScrollingToContentEdgeOldValue);
9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
903df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setPagination(Document* document, const String& mode, int gap, int pageLength, ExceptionState& es)
9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
905926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document || !document->page()) {
906df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
907926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
908926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
909926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Page* page = document->page();
910926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
911926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Pagination pagination;
912926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (mode == "Unpaginated")
913926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        pagination.mode = Pagination::Unpaginated;
914926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    else if (mode == "LeftToRightPaginated")
915926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        pagination.mode = Pagination::LeftToRightPaginated;
916926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    else if (mode == "RightToLeftPaginated")
917926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        pagination.mode = Pagination::RightToLeftPaginated;
918926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    else if (mode == "TopToBottomPaginated")
919926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        pagination.mode = Pagination::TopToBottomPaginated;
920926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    else if (mode == "BottomToTopPaginated")
921926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        pagination.mode = Pagination::BottomToTopPaginated;
922926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    else {
923df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(SyntaxError);
924926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
925926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
926926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
927926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    pagination.gap = gap;
928926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    pagination.pageLength = pageLength;
929926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    page->setPagination(pagination);
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
932df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::configurationForViewport(Document* document, float, int deviceWidth, int deviceHeight, int availableWidth, int availableHeight, ExceptionState& es)
9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
934926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document || !document->page()) {
935df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
936926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return String();
937926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
938926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Page* page = document->page();
939926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
9407757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    // Update initial viewport size.
9417757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    IntSize initialViewportSize(availableWidth, availableHeight);
9427757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    document->page()->mainFrame()->view()->setFrameRect(IntRect(IntPoint::zero(), initialViewportSize));
9437757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    document->styleResolver()->viewportStyleResolver()->resolve();
94493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
945926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ViewportArguments arguments = page->viewportArguments();
9467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    PageScaleConstraints constraints = arguments.resolve(initialViewportSize, FloatSize(deviceWidth, deviceHeight), 980 /* defaultLayoutWidthForNonMobilePages */);
9477757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
94893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    constraints.fitToContentsWidth(constraints.layoutSize.width(), availableWidth);
949926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
9507757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    StringBuilder builder;
9517757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
9527757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.appendLiteral("viewport size ");
9537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.append(String::number(constraints.layoutSize.width()));
9547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.append('x');
9557757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.append(String::number(constraints.layoutSize.height()));
9567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
9577757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.appendLiteral(" scale ");
9587757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.append(String::number(constraints.initialScale));
9597757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.appendLiteral(" with limits [");
9607757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.append(String::number(constraints.minimumScale));
9617757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.appendLiteral(", ");
9627757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.append(String::number(constraints.maximumScale));
9637757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
9647757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.appendLiteral("] and userScalable ");
9657757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    builder.append(arguments.userZoom ? "true" : "false");
9667757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
9677757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    return builder.toString();
9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
970df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::wasLastChangeUserEdit(Element* textField, ExceptionState& es)
9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!textField) {
973df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
977521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (textField->hasTagName(inputTag))
978521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return toHTMLInputElement(textField)->lastChangeWasUserEdit();
9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: We should be using hasTagName instead but Windows port doesn't link QualifiedNames properly.
9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (textField->tagName() == "TEXTAREA")
982e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        return toHTMLTextAreaElement(textField)->lastChangeWasUserEdit();
9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
984df95704c49daea886ddad70775bda23618d6274dBen Murdoch    es.throwDOMException(InvalidNodeTypeError);
9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
988df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::elementShouldAutoComplete(Element* element, ExceptionState& es)
989926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
990926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!element) {
991df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
992926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return false;
993926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
994926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
995521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (element->hasTagName(inputTag))
996521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return toHTMLInputElement(element)->shouldAutocomplete();
997926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
998df95704c49daea886ddad70775bda23618d6274dBen Murdoch    es.throwDOMException(InvalidNodeTypeError);
999926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return false;
1000926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1001926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1002df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::suggestedValue(Element* element, ExceptionState& es)
10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element) {
1005df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1009521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (!element->hasTagName(inputTag)) {
1010df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidNodeTypeError);
10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1014521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    return toHTMLInputElement(element)->suggestedValue();
10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1017df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setSuggestedValue(Element* element, const String& value, ExceptionState& es)
10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element) {
1020df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
10225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1024521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (!element->hasTagName(inputTag)) {
1025df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidNodeTypeError);
10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1029521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    toHTMLInputElement(element)->setSuggestedValue(value);
10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1032df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setEditingValue(Element* element, const String& value, ExceptionState& es)
10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element) {
1035df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1039521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (!element->hasTagName(inputTag)) {
1040df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidNodeTypeError);
10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
10425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1044521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    toHTMLInputElement(element)->setEditingValue(value);
10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1047df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setAutofilled(Element* element, bool enabled, ExceptionState& es)
1048926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1049521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (!element->hasTagName(inputTag)) {
1050df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
1051926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
1052926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
1053521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    toHTMLInputElement(element)->setAutofilled(enabled);
1054926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1055926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1056df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::scrollElementToRect(Element* element, long x, long y, long w, long h, ExceptionState& es)
10575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element || !element->document() || !element->document()->view()) {
1059df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameView* frameView = element->document()->view();
10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->scrollElementToRect(element, IntRect(x, y, w, h));
10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1066df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::paintControlTints(Document* document, ExceptionState& es)
10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->view()) {
1069df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameView* frameView = document->view();
10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->paintControlTints();
10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1077df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<Range> Internals::rangeFromLocationAndLength(Element* scope, int rangeLocation, int rangeLength, ExceptionState& es)
10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!scope) {
1080df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return TextIterator::rangeFromLocationAndLength(scope, rangeLocation, rangeLength);
10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1087df95704c49daea886ddad70775bda23618d6274dBen Murdochunsigned Internals::locationFromRange(Element* scope, const Range* range, ExceptionState& es)
10885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!scope || !range) {
1090df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
10925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    size_t location = 0;
10955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    size_t unusedLength = 0;
10965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    TextIterator::getLocationAndLengthFromRange(scope, range, location, unusedLength);
10975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return location;
10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1100df95704c49daea886ddad70775bda23618d6274dBen Murdochunsigned Internals::lengthFromRange(Element* scope, const Range* range, ExceptionState& es)
11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
11025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!scope || !range) {
1103df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
11045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
11065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    size_t unusedLocation = 0;
11085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    size_t length = 0;
11095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    TextIterator::getLocationAndLengthFromRange(scope, range, unusedLocation, length);
11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return length;
11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
11125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1113df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::rangeAsText(const Range* range, ExceptionState& es)
11145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!range) {
1116df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return range->text();
11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1123df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<DOMPoint> Internals::touchPositionAdjustedToBestClickableNode(long x, long y, long width, long height, Document* document, ExceptionState& es)
11245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame()) {
1126df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
11285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
11295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
113093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    document->updateLayout();
113193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntSize radius(width / 2, height / 2);
11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint point(x + radius.width(), y + radius.height());
11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* targetNode;
11365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint adjustedPoint;
11375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool foundNode = document->frame()->eventHandler()->bestClickableNodeForTouchPoint(point, radius, adjustedPoint, targetNode);
11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (foundNode)
114053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return DOMPoint::create(adjustedPoint.x(), adjustedPoint.y());
11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
11445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1145df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::touchNodeAdjustedToBestClickableNode(long x, long y, long width, long height, Document* document, ExceptionState& es)
11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
11475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame()) {
1148df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
11495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
11505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
11515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
115293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    document->updateLayout();
115393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
11545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntSize radius(width / 2, height / 2);
11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint point(x + radius.width(), y + radius.height());
11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* targetNode;
11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint adjustedPoint;
11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    document->frame()->eventHandler()->bestClickableNodeForTouchPoint(point, radius, adjustedPoint, targetNode);
11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return targetNode;
11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1163df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<DOMPoint> Internals::touchPositionAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document* document, ExceptionState& es)
11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame()) {
1166df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
11675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
11685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
117093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    document->updateLayout();
117193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntSize radius(width / 2, height / 2);
11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint point(x + radius.width(), y + radius.height());
11745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* targetNode = 0;
11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint adjustedPoint;
11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool foundNode = document->frame()->eventHandler()->bestContextMenuNodeForTouchPoint(point, radius, adjustedPoint, targetNode);
11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (foundNode)
118053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return DOMPoint::create(adjustedPoint.x(), adjustedPoint.y());
11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
118253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return DOMPoint::create(x, y);
11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185df95704c49daea886ddad70775bda23618d6274dBen MurdochNode* Internals::touchNodeAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document* document, ExceptionState& es)
11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame()) {
1188df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
11895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
11905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
119293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    document->updateLayout();
119393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
11945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntSize radius(width / 2, height / 2);
11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint point(x + radius.width(), y + radius.height());
11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* targetNode = 0;
11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint adjustedPoint;
11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    document->frame()->eventHandler()->bestContextMenuNodeForTouchPoint(point, radius, adjustedPoint, targetNode);
12005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return targetNode;
12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1203df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<ClientRect> Internals::bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document* document, ExceptionState& es)
12045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
12055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame()) {
1206df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
121093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    document->updateLayout();
121193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntSize radius(width / 2, height / 2);
12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntPoint point(x + radius.width(), y + radius.height());
12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* targetNode;
12165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntRect zoomableArea;
12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool foundNode = document->frame()->eventHandler()->bestZoomableAreaForTouchPoint(point, radius, zoomableArea, targetNode);
12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (foundNode)
12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return ClientRect::create(zoomableArea);
12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
12225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
12235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1225df95704c49daea886ddad70775bda23618d6274dBen Murdochint Internals::lastSpellCheckRequestSequence(Document* document, ExceptionState& es)
12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
12275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SpellChecker* checker = spellchecker(document);
12285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!checker) {
1230df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return -1;
12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return checker->lastRequestSequence();
12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1237df95704c49daea886ddad70775bda23618d6274dBen Murdochint Internals::lastSpellCheckProcessedSequence(Document* document, ExceptionState& es)
12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SpellChecker* checker = spellchecker(document);
12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!checker) {
1242df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return -1;
12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return checker->lastProcessedSequence();
12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Vector<String> Internals::userPreferredLanguages() const
12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return WebCore::userPreferredLanguages();
12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::setUserPreferredLanguages(const Vector<String>& languages)
12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebCore::overrideUserPreferredLanguages(languages);
12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1259df95704c49daea886ddad70775bda23618d6274dBen Murdochunsigned Internals::wheelEventHandlerCount(Document* document, ExceptionState& es)
12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document) {
1262df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
12655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return document->wheelEventHandlerCount();
12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
12685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1269df95704c49daea886ddad70775bda23618d6274dBen Murdochunsigned Internals::touchEventHandlerCount(Document* document, ExceptionState& es)
12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document) {
1272df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
12735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
12745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
12755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    const TouchEventTargetSet* touchHandlers = document->touchEventTargets();
1277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!touchHandlers)
1278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
1279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    unsigned count = 0;
1281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    for (TouchEventTargetSet::const_iterator iter = touchHandlers->begin(); iter != touchHandlers->end(); ++iter)
1282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        count += iter->value;
1283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return count;
1284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1286df95704c49daea886ddad70775bda23618d6274dBen MurdochLayerRectList* Internals::touchEventTargetLayerRects(Document* document, ExceptionState& es)
1287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
12887757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    if (!document || !document->view() || !document->page() || document != contextDocument()) {
1289df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
1290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
1291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
1292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
12937757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    // Do any pending layouts (which may call touchEventTargetRectsChange) to ensure this
12947757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    // really takes any previous changes into account.
12957757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    document->updateLayout();
12967757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    return m_currentTouchEventRects.get();
12977757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch}
1298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1299df95704c49daea886ddad70775bda23618d6274dBen Murdochunsigned Internals::touchEventTargetLayerRectsUpdateCount(Document* document, ExceptionState& es)
13007757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch{
13017757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    if (!document || !document->view() || !document->page() || document != contextDocument()) {
1302df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
13037757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        return 0;
13047757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    }
13057757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
13067757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    // Do any pending layouts to ensure this really takes any previous changes into account.
13077757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    document->updateLayout();
1308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
13097757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    return m_touchEventTargetRectUpdateCount;
13107757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch}
1311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
13127757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdochvoid Internals::touchEventTargetRectsChanged(const LayerHitTestRects& rects)
13137757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch{
1314f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    // When profiling content_shell, it can be handy to exclude this time (since it's only
1315f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    // present for testing / debugging).
1316f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    TRACE_EVENT0("input", "Internals::touchEventTargetRectsChanged");
1317f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
13187757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    m_touchEventTargetRectUpdateCount++;
13197757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
13207757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    // Since it's not safe to hang onto the pointers in a LayerHitTestRects, we immediately
13217757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    // copy into a LayerRectList.
13227757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    m_currentTouchEventRects = LayerRectList::create();
13237757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    for (LayerHitTestRects::const_iterator iter = rects.begin(); iter != rects.end(); ++iter) {
13247757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        for (size_t i = 0; i < iter->value.size(); ++i) {
13257757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch            m_currentTouchEventRects->append(iter->key->renderer()->node(), ClientRect::create(enclosingIntRect(iter->value[i])));
13267757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        }
13277757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    }
13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
13295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
133053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)PassRefPtr<NodeList> Internals::nodesFromRect(Document* document, int centerX, int centerY, unsigned topPadding, unsigned rightPadding,
1331df95704c49daea886ddad70775bda23618d6274dBen Murdoch    unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent, bool allowChildFrameContent, ExceptionState& es) const
13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame() || !document->frame()->view()) {
1334df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
13365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
133853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    Frame* frame = document->frame();
133953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    FrameView* frameView = document->view();
134053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    RenderView* renderView = document->renderView();
134153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
134253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!renderView)
134353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return 0;
134453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
134553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    float zoomFactor = frame->pageZoomFactor();
134653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    LayoutPoint point = roundedLayoutPoint(FloatPoint(centerX * zoomFactor + frameView->scrollX(), centerY * zoomFactor + frameView->scrollY()));
134753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitTestRequest::Active;
1349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (ignoreClipping)
1350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        hitType |= HitTestRequest::IgnoreClipping;
135153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!allowShadowContent)
135253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        hitType |= HitTestRequest::DisallowShadowContent;
1353926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (allowChildFrameContent)
1354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        hitType |= HitTestRequest::AllowChildFrameContent;
1355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
135653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    HitTestRequest request(hitType);
135753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
135853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    // When ignoreClipping is false, this method returns null for coordinates outside of the viewport.
135953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!request.ignoreClipping() && !frameView->visibleContentRect().intersects(HitTestLocation::rectForPoint(point, topPadding, rightPadding, bottomPadding, leftPadding)))
136053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return 0;
136153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
136253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    Vector<RefPtr<Node> > matches;
136353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
136453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    // Need padding to trigger a rect based hit test, but we want to return a NodeList
136553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    // so we special case this.
136653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!topPadding && !rightPadding && !bottomPadding && !leftPadding) {
136753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        HitTestResult result(point);
136853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        renderView->hitTest(request, result);
136953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (result.innerNode())
137053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            matches.append(result.innerNode()->deprecatedShadowAncestorNode());
137153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    } else {
137253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        HitTestResult result(point, topPadding, rightPadding, bottomPadding, leftPadding);
137353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        renderView->hitTest(request, result);
137453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        copyToVector(result.rectBasedTestResult(), matches);
137553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    }
137653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
137753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return StaticNodeList::adopt(matches);
13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
13795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::emitInspectorDidBeginFrame()
13815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorController* inspectorController = contextDocument()->frame()->page()->inspectorController();
1383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    inspectorController->didBeginFrame();
13845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::emitInspectorDidCancelFrame()
13875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorController* inspectorController = contextDocument()->frame()->page()->inspectorController();
1389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    inspectorController->didCancelFrame();
13905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
13915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1392df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::hasSpellingMarker(Document* document, int from, int length, ExceptionState&)
13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
13945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame())
13955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
13965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return document->frame()->editor()->selectionStartHasMarkerFor(DocumentMarker::Spelling, from, length);
13985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
139953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1400df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setContinuousSpellCheckingEnabled(bool enabled, ExceptionState&)
1401926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1402926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!contextDocument() || !contextDocument()->frame() || !contextDocument()->frame()->editor())
1403926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
1404926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1405926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (enabled != contextDocument()->frame()->editor()->isContinuousSpellCheckingEnabled())
1406926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        contextDocument()->frame()->editor()->toggleContinuousSpellChecking();
1407926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1408926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1409df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::isOverwriteModeEnabled(Document* document, ExceptionState&)
141053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
141153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!document || !document->frame())
141253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return 0;
141353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
141453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return document->frame()->editor()->isOverwriteModeEnabled();
141553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
141653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1417df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::toggleOverwriteModeEnabled(Document* document, ExceptionState&)
141853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
141953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!document || !document->frame())
142053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return;
142153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
142253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    document->frame()->editor()->toggleOverwriteModeEnabled();
142353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
142453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
14255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned Internals::numberOfLiveNodes() const
14265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
14275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return InspectorCounters::counterValue(InspectorCounters::NodeCounter);
14285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned Internals::numberOfLiveDocuments() const
14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
14325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return InspectorCounters::counterValue(InspectorCounters::DocumentCounter);
14335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Vector<String> Internals::consoleMessageArgumentCounts(Document* document) const
14365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
14375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InstrumentingAgents* instrumentingAgents = instrumentationForPage(document->page());
14385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!instrumentingAgents)
14395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return Vector<String>();
14405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent();
14415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!consoleAgent)
14425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return Vector<String>();
14435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Vector<unsigned> counts = consoleAgent->consoleMessageArgumentCounts();
14445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Vector<String> result(counts.size());
14455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (size_t i = 0; i < counts.size(); i++)
14465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result[i] = String::number(counts[i]);
14475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result;
14485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<DOMWindow> Internals::openDummyInspectorFrontend(const String& url)
14515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
14525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page* page = contextDocument()->frame()->page();
14535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(page);
14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14557757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    DOMWindow* window = page->mainFrame()->domWindow();
14565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(window);
14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_frontendWindow = window->open(url, "", "", window, window);
14595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(m_frontendWindow);
14605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page* frontendPage = m_frontendWindow->document()->page();
14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(frontendPage);
14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
146453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    OwnPtr<InspectorFrontendClientLocal> frontendClient = adoptPtr(new InspectorFrontendClientLocal(page->inspectorController(), frontendPage));
14655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frontendPage->inspectorController()->setInspectorFrontendClient(frontendClient.release());
14675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_frontendChannel = adoptPtr(new InspectorFrontendChannelDummy(frontendPage));
14695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    page->inspectorController()->connectFrontend(m_frontendChannel.get());
14715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_frontendWindow;
14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::closeDummyInspectorFrontend()
14765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
14775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page* page = contextDocument()->frame()->page();
14785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(page);
14795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(m_frontendWindow);
14805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    page->inspectorController()->disconnectFrontend();
14825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_frontendChannel.release();
14845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_frontendWindow->close(m_frontendWindow->scriptExecutionContext());
14865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_frontendWindow.release();
14875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1489e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochVector<unsigned long> Internals::setMemoryCacheCapacities(unsigned long minDeadBytes, unsigned long maxDeadBytes, unsigned long totalBytes)
1490e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{
1491e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    Vector<unsigned long> result;
1492e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    result.append(memoryCache()->minDeadCapacity());
1493e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    result.append(memoryCache()->maxDeadCapacity());
1494e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    result.append(memoryCache()->capacity());
1495e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    memoryCache()->setCapacities(minDeadBytes, maxDeadBytes, totalBytes);
1496e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    return result;
1497e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}
1498e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
1499df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setInspectorResourcesDataSizeLimits(int maximumResourcesContentSize, int maximumSingleResourceContentSize, ExceptionState& es)
15005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
15015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page* page = contextDocument()->frame()->page();
15025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!page || !page->inspectorController()) {
1503df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
15045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
15055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
15065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    page->inspectorController()->setResourcesDataSizeLimitsFromInternals(maximumResourcesContentSize, maximumSingleResourceContentSize);
15075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
15085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1509df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::hasGrammarMarker(Document* document, int from, int length, ExceptionState&)
15105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
15115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame())
15125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
15135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return document->frame()->editor()->selectionStartHasMarkerFor(DocumentMarker::Grammar, from, length);
15155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1517df95704c49daea886ddad70775bda23618d6274dBen Murdochunsigned Internals::numberOfScrollableAreas(Document* document, ExceptionState&)
15185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
15195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned count = 0;
15205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Frame* frame = document->frame();
15215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (frame->view()->scrollableAreas())
15225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        count += frame->view()->scrollableAreas()->size();
15235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (Frame* child = frame->tree()->firstChild(); child; child = child->tree()->nextSibling()) {
15255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (child->view() && child->view()->scrollableAreas())
15265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            count += child->view()->scrollableAreas()->size();
15275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
15285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return count;
15305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
153153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1532df95704c49daea886ddad70775bda23618d6274dBen Murdochbool Internals::isPageBoxVisible(Document* document, int pageNumber, ExceptionState& es)
15335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
15345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document) {
1535df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
15365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
15375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
15385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return document->isPageBoxVisible(pageNumber);
15405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
15415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1542df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::layerTreeAsText(Document* document, ExceptionState& es) const
15435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1544df95704c49daea886ddad70775bda23618d6274dBen Murdoch    return layerTreeAsText(document, 0, es);
15455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
15465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1547df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::elementLayerTreeAsText(Element* element, ExceptionState& es) const
1548521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles){
1549df95704c49daea886ddad70775bda23618d6274dBen Murdoch    return elementLayerTreeAsText(element, 0, es);
1550521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)}
1551521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1552df95704c49daea886ddad70775bda23618d6274dBen Murdochstatic PassRefPtr<NodeList> paintOrderList(Element* element, ExceptionState& es, RenderLayer::PaintOrderListType type)
155353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
155453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!element) {
1555df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
155653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return 0;
155753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    }
155853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
155953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    element->document()->updateLayout();
156053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
156153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    RenderObject* renderer = element->renderer();
156253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!renderer || !renderer->isBox()) {
1563df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
156453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return 0;
156553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    }
156653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
156753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    RenderLayer* layer = toRenderBox(renderer)->layer();
156853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!layer) {
1569df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
157053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return 0;
157153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    }
157253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
157353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    Vector<RefPtr<Node> > nodes;
157453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    layer->computePaintOrderList(type, nodes);
157553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return StaticNodeList::adopt(nodes);
157653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
157753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1578df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<NodeList> Internals::paintOrderListBeforePromote(Element* element, ExceptionState& es)
157953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
1580df95704c49daea886ddad70775bda23618d6274dBen Murdoch    return paintOrderList(element, es, RenderLayer::BeforePromote);
158153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
158253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1583df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<NodeList> Internals::paintOrderListAfterPromote(Element* element, ExceptionState& es)
158453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
1585df95704c49daea886ddad70775bda23618d6274dBen Murdoch    return paintOrderList(element, es, RenderLayer::AfterPromote);
158653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
158753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1588df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::layerTreeAsText(Document* document, unsigned flags, ExceptionState& es) const
15895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
15905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame()) {
1591df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
15925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
15935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
15945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1595521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    return document->frame()->layerTreeAsText(flags);
1596521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)}
1597521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1598df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::elementLayerTreeAsText(Element* element, unsigned flags, ExceptionState& es) const
1599521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles){
1600521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (!element) {
1601df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
1602521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return String();
1603521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    }
1604521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1605521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    element->document()->updateLayout();
1606521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1607521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    RenderObject* renderer = element->renderer();
1608521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    if (!renderer || !renderer->isBox()) {
1609df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
1610521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return String();
1611521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    }
1612521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1613521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    RenderLayer* layer = toRenderBox(renderer)->layer();
161483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch    if (!layer
161583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch        || !layer->backing()
161683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch        || !layer->backing()->graphicsLayer()) {
1617521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        // Don't raise exception in these cases which may be normally used in tests.
1618521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return String();
1619521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    }
16205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1621521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    return layer->backing()->graphicsLayer()->layerTreeAsText(flags);
16225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
16235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1624df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setNeedsCompositedScrolling(Element* element, unsigned needsCompositedScrolling, ExceptionState& es)
16255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){
16265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (!element) {
1627df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
16285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return;
16295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    }
16305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
16315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    element->document()->updateLayout();
16325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
16335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    RenderObject* renderer = element->renderer();
16345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (!renderer || !renderer->isBox()) {
1635df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
16365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return;
16375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    }
16385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
16395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    RenderLayer* layer = toRenderBox(renderer)->layer();
16405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (!layer) {
1641df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
16425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return;
16435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    }
16445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
16455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    layer->setForceNeedsCompositedScrolling(static_cast<RenderLayer::ForceNeedsCompositedScrollingMode>(needsCompositedScrolling));
16465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}
16475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1648df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::repaintRectsAsText(Document* document, ExceptionState& es) const
16495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
16505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->frame()) {
1651df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
16525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
16535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
16545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return document->frame()->trackedRepaintRectsAsText();
16565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
16575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1658df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::scrollingStateTreeAsText(Document* document, ExceptionState& es) const
16595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
166053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return String();
16615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
16625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1663df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::mainThreadScrollingReasons(Document* document, ExceptionState& es) const
1664926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1665926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document || !document->frame()) {
1666df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
1667926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return String();
1668926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
1669926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1670926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Page* page = document->page();
1671926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!page)
1672926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return String();
1673926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1674926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return page->mainThreadScrollingReasonsAsText();
1675926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1676926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1677df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<ClientRectList> Internals::nonFastScrollableRects(Document* document, ExceptionState& es) const
1678926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1679926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document || !document->frame()) {
1680df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
1681926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
1682926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
1683926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Page* page = document->page();
1685926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!page)
1686926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
1687926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1688926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return page->nonFastScrollableRects(document->frame());
1689926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1690926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1691df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::garbageCollectDocumentResources(Document* document, ExceptionState& es) const
16925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
16935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document) {
1694df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
16955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
16965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
16975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16983464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch    ResourceFetcher* fetcher = document->fetcher();
16993464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch    if (!fetcher)
17005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
17013464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch    fetcher->garbageCollectDocumentResources();
17025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1704fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdochvoid Internals::evictAllResources() const
17050019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch{
17060019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    memoryCache()->evictResources();
17070019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch}
17080019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
17095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::allowRoundingHacks() const
17105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1711926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    TextRun::setAllowsRoundingHacks(true);
1712926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1713926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1714926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void Internals::insertAuthorCSS(Document* document, const String& css) const
1715926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1716926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    RefPtr<StyleSheetContents> parsedSheet = StyleSheetContents::create(document);
1717926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    parsedSheet->setIsUserStyleSheet(false);
1718926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    parsedSheet->parseString(css);
1719926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    document->styleSheetCollection()->addAuthorSheet(parsedSheet);
1720926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1721926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1722926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void Internals::insertUserCSS(Document* document, const String& css) const
1723926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1724926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    RefPtr<StyleSheetContents> parsedSheet = StyleSheetContents::create(document);
1725926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    parsedSheet->setIsUserStyleSheet(true);
1726926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    parsedSheet->parseString(css);
1727926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    document->styleSheetCollection()->addUserSheet(parsedSheet);
17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String Internals::counterValue(Element* element)
17315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
17325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element)
17335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
17345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return counterValueForElement(element);
17365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int Internals::pageNumber(Element* element, float pageWidth, float pageHeight)
17395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
17405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!element)
17415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
17425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return PrintContext::pageNumberForElement(element, FloatSize(pageWidth, pageHeight));
17445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1746926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Vector<String> Internals::iconURLs(Document* document, int iconTypesMask) const
17475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1748926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Vector<IconURL> iconURLs = document->iconURLs(iconTypesMask);
1749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Vector<String> array;
17505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Vector<IconURL>::const_iterator iter(iconURLs.begin());
17525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (; iter != iconURLs.end(); ++iter)
1753926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        array.append(iter->m_iconURL.string());
17545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1755926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return array;
1756926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1757926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1758926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Vector<String> Internals::shortcutIconURLs(Document* document) const
1759926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1760926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return iconURLs(document, Favicon);
1761926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1762926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1763926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Vector<String> Internals::allIconURLs(Document* document) const
1764926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1765926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return iconURLs(document, Favicon | TouchIcon | TouchPrecomposedIcon);
17665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int Internals::numberOfPages(float pageWidth, float pageHeight)
17695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
17705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!frame())
17715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return -1;
17725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return PrintContext::numberOfPages(frame(), FloatSize(pageWidth, pageHeight));
17745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1776df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::pageProperty(String propertyName, int pageNumber, ExceptionState& es) const
17775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
17785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!frame()) {
1779df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
17805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
17815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
17825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return PrintContext::pageProperty(frame(), propertyName.utf8().data(), pageNumber);
17845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1786df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::pageSizeAndMarginsInPixels(int pageNumber, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft, ExceptionState& es) const
17875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
17885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!frame()) {
1789df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
17905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
17915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
17925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return PrintContext::pageSizeAndMarginsInPixels(frame(), pageNumber, width, height, marginTop, marginRight, marginBottom, marginLeft);
17945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1796df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setDeviceScaleFactor(float scaleFactor, ExceptionState& es)
1797e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){
1798e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    Document* document = contextDocument();
1799e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    if (!document || !document->page()) {
1800df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
1801e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)        return;
1802e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    }
1803e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    Page* page = document->page();
1804e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    page->setDeviceScaleFactor(scaleFactor);
1805e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)}
1806e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)
1807df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::setIsCursorVisible(Document* document, bool isVisible, ExceptionState& es)
180853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
180953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!document || !document->page()) {
1810df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
181153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return;
181253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    }
181353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    document->page()->setIsCursorVisible(isVisible);
181453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
181553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
18165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::webkitWillEnterFullScreenForElement(Document* document, Element* element)
18175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document)
18195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1820f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    FullscreenElementStack::from(document)->webkitWillEnterFullScreenForElement(element);
18215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::webkitDidEnterFullScreenForElement(Document* document, Element* element)
18245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document)
18265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1827f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    FullscreenElementStack::from(document)->webkitDidEnterFullScreenForElement(element);
18285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::webkitWillExitFullScreenForElement(Document* document, Element* element)
18315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document)
18335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1834f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    FullscreenElementStack::from(document)->webkitWillExitFullScreenForElement(element);
18355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::webkitDidExitFullScreenForElement(Document* document, Element* element)
18385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document)
18405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1841f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    FullscreenElementStack::from(document)->webkitDidExitFullScreenForElement(element);
18425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::registerURLSchemeAsBypassingContentSecurityPolicy(const String& scheme)
18455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy(scheme);
18475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void Internals::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(const String& scheme)
18505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(scheme);
18525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<MallocStatistics> Internals::mallocStatistics() const
18555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return MallocStatistics::create();
18575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1859926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)PassRefPtr<TypeConversions> Internals::typeConversions() const
1860926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1861926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return TypeConversions::create();
1862926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1863926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1864926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Vector<String> Internals::getReferencedFilePaths() const
18655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frame()->loader()->history()->saveDocumentAndScrollState();
1867926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return FormController::getReferencedFilePaths(frame()->loader()->history()->currentItem()->documentState());
18685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1870df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::startTrackingRepaints(Document* document, ExceptionState& es)
18715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->view()) {
1873df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
18745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
18755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
18765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameView* frameView = document->view();
18785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->setTracksRepaints(true);
18795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1881df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid Internals::stopTrackingRepaints(Document* document, ExceptionState& es)
18825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!document || !document->view()) {
1884df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
18855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
18865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
18875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameView* frameView = document->view();
18895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frameView->setTracksRepaints(false);
18905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1892926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static const char* cursorTypeToString(Cursor::Type cursorType)
1893926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1894926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    switch (cursorType) {
1895926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Pointer: return "Pointer";
1896926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Cross: return "Cross";
1897926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Hand: return "Hand";
1898926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::IBeam: return "IBeam";
1899926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Wait: return "Wait";
1900926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Help: return "Help";
1901926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::EastResize: return "EastResize";
1902926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthResize: return "NorthResize";
1903926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthEastResize: return "NorthEastResize";
1904926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthWestResize: return "NorthWestResize";
1905926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::SouthResize: return "SouthResize";
1906926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::SouthEastResize: return "SouthEastResize";
1907926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::SouthWestResize: return "SouthWestResize";
1908926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::WestResize: return "WestResize";
1909926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthSouthResize: return "NorthSouthResize";
1910926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::EastWestResize: return "EastWestResize";
1911926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthEastSouthWestResize: return "NorthEastSouthWestResize";
1912926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthWestSouthEastResize: return "NorthWestSouthEastResize";
1913926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::ColumnResize: return "ColumnResize";
1914926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::RowResize: return "RowResize";
1915926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::MiddlePanning: return "MiddlePanning";
1916926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::EastPanning: return "EastPanning";
1917926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthPanning: return "NorthPanning";
1918926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthEastPanning: return "NorthEastPanning";
1919926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NorthWestPanning: return "NorthWestPanning";
1920926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::SouthPanning: return "SouthPanning";
1921926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::SouthEastPanning: return "SouthEastPanning";
1922926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::SouthWestPanning: return "SouthWestPanning";
1923926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::WestPanning: return "WestPanning";
1924926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Move: return "Move";
1925926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::VerticalText: return "VerticalText";
1926926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Cell: return "Cell";
1927926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::ContextMenu: return "ContextMenu";
1928926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Alias: return "Alias";
1929926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Progress: return "Progress";
1930926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NoDrop: return "NoDrop";
1931926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Copy: return "Copy";
1932926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::None: return "None";
1933926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::NotAllowed: return "NotAllowed";
1934926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::ZoomIn: return "ZoomIn";
1935926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::ZoomOut: return "ZoomOut";
1936926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Grab: return "Grab";
1937926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Grabbing: return "Grabbing";
1938926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case Cursor::Custom: return "Custom";
1939926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
1940926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1941926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ASSERT_NOT_REACHED();
1942926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return "UNKNOWN";
1943926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1944926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1945df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::getCurrentCursorInfo(Document* document, ExceptionState& es)
1946926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1947926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!document || !document->frame()) {
1948df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
1949926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return String();
1950926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
1951926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1952926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Cursor cursor = document->frame()->eventHandler()->currentMouseCursor();
1953926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1954926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    StringBuilder result;
1955926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    result.append("type=");
1956926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    result.append(cursorTypeToString(cursor.type()));
1957926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    result.append(" hotSpot=");
1958926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    result.appendNumber(cursor.hotSpot().x());
1959926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    result.append(",");
1960926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    result.appendNumber(cursor.hotSpot().y());
1961926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (cursor.image()) {
1962926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        IntSize size = cursor.image()->size();
1963926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        result.append(" image=");
1964926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        result.appendNumber(size.width());
1965926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        result.append("x");
1966926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        result.appendNumber(size.height());
1967926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
1968926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (cursor.imageScaleFactor() != 1) {
1969926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        result.append(" scale=");
1970926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        NumberToStringBuffer buffer;
1971926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        result.append(numberToFixedPrecisionString(cursor.imageScaleFactor(), 8, buffer, true));
1972926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
197353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1974926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return result.toString();
1975926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1976926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1977926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)PassRefPtr<ArrayBuffer> Internals::serializeObject(PassRefPtr<SerializedScriptValue> value) const
1978926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1979926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    String stringValue = value->toWireString();
1980591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    RefPtr<ArrayBuffer> buffer = ArrayBuffer::createUninitialized(stringValue.length(), sizeof(UChar));
1981e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    stringValue.copyTo(static_cast<UChar*>(buffer->data()), 0, stringValue.length());
1982591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    return buffer.release();
1983926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1984926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1985926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)PassRefPtr<SerializedScriptValue> Internals::deserializeBuffer(PassRefPtr<ArrayBuffer> buffer) const
1986926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1987926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    String value(static_cast<const UChar*>(buffer->data()), buffer->byteLength() / sizeof(UChar));
1988926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return SerializedScriptValue::createFromWire(value);
1989926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1990926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1991926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void Internals::setUsesOverlayScrollbars(bool enabled)
1992926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1993926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebCore::Settings::setUsesOverlayScrollbars(enabled);
1994926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1995926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1996926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void Internals::forceReload(bool endToEnd)
1997926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
19987757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    frame()->loader()->reload(endToEnd ? EndToEndReload : NormalReload);
1999926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
2000926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
2001df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<ClientRect> Internals::selectionBounds(ExceptionState& es)
2002591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{
2003591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    Document* document = contextDocument();
2004591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!document || !document->frame() || !document->frame()->selection()) {
2005df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
2006591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return 0;
2007591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    }
2008591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
2009591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    return ClientRect::create(document->frame()->selection()->bounds());
2010591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch}
2011591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
2012df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::markerTextForListItem(Element* element, ExceptionState& es)
2013926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
2014926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!element) {
2015df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
2016926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return String();
2017926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
2018926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return WebCore::markerTextForListItem(element);
2019926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
2020926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
2021df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::getImageSourceURL(Element* element, ExceptionState& es)
2022926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
2023926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!element) {
2024df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
2025926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return String();
2026926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
2027926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return element->imageSourceURL();
2028926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
2029926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
2030df95704c49daea886ddad70775bda23618d6274dBen MurdochString Internals::baseURL(Document* document, ExceptionState& es)
2031591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{
2032591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!document) {
2033df95704c49daea886ddad70775bda23618d6274dBen Murdoch        es.throwDOMException(InvalidAccessError);
2034591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return String();
2035591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    }
2036591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
2037591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    return document->baseURL().string();
2038591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch}
2039591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
204053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool Internals::isSelectPopupVisible(Node* node)
2041926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
20420019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    if (!node->hasTagName(HTMLNames::selectTag))
204353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return false;
204453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
204553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    HTMLSelectElement* select = toHTMLSelectElement(node);
204653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
204753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    RenderObject* renderer = select->renderer();
204853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!renderer->isMenuList())
204953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return false;
205053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
205153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    RenderMenuList* menuList = toRenderMenuList(renderer);
205253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return menuList->popupIsVisible();
2053926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
2054926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
2055fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdochbool Internals::loseSharedGraphicsContext3D()
2056fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch{
2057fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    RefPtr<GraphicsContext3D> sharedContext = SharedGraphicsContext3D::get();
2058fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    if (!sharedContext)
2059fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch        return false;
2060fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    sharedContext->getExtensions()->loseContextCHROMIUM(Extensions3D::GUILTY_CONTEXT_RESET_ARB, Extensions3D::INNOCENT_CONTEXT_RESET_ARB);
2061fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    // To prevent tests that call loseSharedGraphicsContext3D from being
2062fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    // flaky, we call finish so that the context is guaranteed to be lost
2063fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    // synchronously (i.e. before returning).
2064fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    sharedContext->finish();
2065fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    return true;
2066fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch}
2067fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch
20685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2069