15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 32f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDocument.h" 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/Dictionary.h" 35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptState.h" 37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptValue.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/accessibility/AXObjectCache.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/StyleSheetContents.h" 401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/CSSSelectorWatch.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentType.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Element.h" 449e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "core/dom/Fullscreen.h" 459bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)#include "core/dom/StyleEngine.h" 4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLAllCollection.h" 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLBodyElement.h" 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLCollection.h" 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLElement.h" 5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormElement.h" 5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLHeadElement.h" 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/html/HTMLLinkElement.h" 5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/DocumentLoader.h" 5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderObject.h" 55d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/rendering/RenderView.h" 5651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityOrigin.h" 578abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "public/platform/WebURL.h" 58f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebAXObject.h" 59f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDOMEvent.h" 60f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDocumentType.h" 61f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebElement.h" 62f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebElementCollection.h" 63f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFormElement.h" 64f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebNodeList.h" 65f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebLocalFrameImpl.h" 668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "wtf/PassRefPtr.h" 67e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include <v8.h> 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebURL WebDocument::url() const 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return constUnwrap<Document>()->url(); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebSecurityOrigin WebDocument::securityOrigin() const 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!constUnwrap<Document>()) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebSecurityOrigin(); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebSecurityOrigin(constUnwrap<Document>()->securityOrigin()); 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebString WebDocument::encoding() const 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 85c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return constUnwrap<Document>()->encodingName(); 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebString WebDocument::contentLanguage() const 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return constUnwrap<Document>()->contentLanguage(); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)WebString WebDocument::referrer() const 94f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles){ 95f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return constUnwrap<Document>()->referrer(); 96f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)} 97f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 98197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebColor WebDocument::themeColor() const 995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 100197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return constUnwrap<Document>()->themeColor().rgb(); 1015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 1025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebURL WebDocument::openSearchDescriptionURL() const 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return const_cast<Document*>(constUnwrap<Document>())->openSearchDescriptionURL(); 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 108a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochWebLocalFrame* WebDocument::frame() const 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return WebLocalFrameImpl::fromFrame(constUnwrap<Document>()->frame()); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebDocument::isHTMLDocument() const 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return constUnwrap<Document>()->isHTMLDocument(); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebDocument::isXHTMLDocument() const 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return constUnwrap<Document>()->isXHTMLDocument(); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebDocument::isPluginDocument() const 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return constUnwrap<Document>()->isPluginDocument(); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebURL WebDocument::baseURL() const 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return constUnwrap<Document>()->baseURL(); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebURL WebDocument::firstPartyForCookies() const 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return constUnwrap<Document>()->firstPartyForCookies(); 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebElement WebDocument::documentElement() const 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebElement(constUnwrap<Document>()->documentElement()); 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebElement WebDocument::body() const 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebElement(constUnwrap<Document>()->body()); 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebElement WebDocument::head() 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebElement(unwrap<Document>()->head()); 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebString WebDocument::title() const 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(constUnwrap<Document>()->title()); 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebElementCollection WebDocument::all() 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return WebElementCollection(unwrap<Document>()->all()); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebDocument::images(WebVector<WebElement>& results) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 165d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLCollection> images = unwrap<Document>()->images(); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t sourceLength = images->length(); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<WebElement> temp; 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) temp.reserveCapacity(sourceLength); 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < sourceLength; ++i) { 17009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Element* element = images->item(i); 17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (element && element->isHTMLElement()) 17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) temp.append(WebElement(element)); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.assign(temp); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebDocument::forms(WebVector<WebFormElement>& results) const 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 179d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLCollection> forms = const_cast<Document*>(constUnwrap<Document>())->forms(); 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t sourceLength = forms->length(); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<WebFormElement> temp; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) temp.reserveCapacity(sourceLength); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < sourceLength; ++i) { 18409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Element* element = forms->item(i); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Strange but true, sometimes node can be 0. 18609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (element && element->isHTMLElement()) 18709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) temp.append(WebFormElement(toHTMLFormElement(element))); 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results.assign(temp); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebURL WebDocument::completeURL(const WebString& partialURL) const 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return constUnwrap<Document>()->completeURL(partialURL); 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebElement WebDocument::getElementById(const WebString& id) const 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebElement(constUnwrap<Document>()->getElementById(id)); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 202d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebElement WebDocument::focusedElement() const 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 204d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return WebElement(constUnwrap<Document>()->focusedElement()); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebDocumentType WebDocument::doctype() const 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebDocumentType(constUnwrap<Document>()->doctype()); 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void WebDocument::insertStyleSheet(const WebString& sourceCode) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 214d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<Document> document = unwrap<Document>(); 2158abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) ASSERT(document); 216d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<StyleSheetContents> parsedSheet = StyleSheetContents::create(CSSParserContext(*document, 0)); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parsedSheet->parseString(sourceCode); 21851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) document->styleEngine()->addAuthorSheet(parsedSheet); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2211e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void WebDocument::watchCSSSelectors(const WebVector<WebString>& webSelectors) 2221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 223d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<Document> document = unwrap<Document>(); 2241e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) Vector<String> selectors; 2251e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) selectors.append(webSelectors.data(), webSelectors.size()); 2261e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) CSSSelectorWatch::from(*document).watchCSSSelectors(selectors); 2271e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 2281e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebDocument::cancelFullScreen() 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2319e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Fullscreen::fullyExitFullscreen(*unwrap<Document>()); 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebElement WebDocument::fullScreenElement() const 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* fullScreenElement = 0; 2379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (Fullscreen* fullscreen = Fullscreen::fromIfExists(*const_cast<WebDocument*>(this)->unwrap<Document>())) 238521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) fullScreenElement = fullscreen->webkitCurrentFullScreenElement(); 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebElement(fullScreenElement); 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebDOMEvent WebDocument::createEvent(const WebString& eventType) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 24451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 245f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebDOMEvent event(unwrap<Document>()->createEvent(eventType, exceptionState)); 24651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (exceptionState.hadException()) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebDOMEvent(); 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return event; 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebReferrerPolicy WebDocument::referrerPolicy() const 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebReferrerPolicy>(constUnwrap<Document>()->referrerPolicy()); 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebElement WebDocument::createElement(const WebString& tagName) 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 25851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 25951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) WebElement element(unwrap<Document>()->createElement(tagName, exceptionState)); 26051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (exceptionState.hadException()) 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebElement(); 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return element; 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebSize WebDocument::scrollOffset() const 2667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 2677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (FrameView* view = constUnwrap<Document>()->view()) 2687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return view->scrollOffset(); 2697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebSize(); 2707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 2717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebSize WebDocument::minimumScrollOffset() const 2737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 2747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (FrameView* view = constUnwrap<Document>()->view()) 2757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return toIntSize(view->minimumScrollPosition()); 2767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebSize(); 2777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 2787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebSize WebDocument::maximumScrollOffset() const 2807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 2817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (FrameView* view = constUnwrap<Document>()->view()) 2827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return toIntSize(view->maximumScrollPosition()); 2837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebSize(); 2847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 2857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 286c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void WebDocument::setIsTransitionDocument() 287c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 288c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) // This ensures the transition UA stylesheet gets applied. 289c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) unwrap<Document>()->setIsTransitionDocument(); 290c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 291c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 292c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void WebDocument::beginExitTransition(const WebString& cssSelector) 293c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 294c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtrWillBeRawPtr<Document> document = unwrap<Document>(); 295c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) document->hideTransitionElements(cssSelector); 296c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) document->styleEngine()->enableExitTransitionStylesheets(); 297c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 298c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 2998abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)WebAXObject WebDocument::accessibilityObject() const 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Document* document = constUnwrap<Document>(); 3027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci AXObjectCache* cache = document->axObjectCache(); 3037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return cache ? WebAXObject(cache->getOrCreate(document->renderView())) : WebAXObject(); 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3068abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)WebAXObject WebDocument::accessibilityObjectFromID(int axID) const 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Document* document = constUnwrap<Document>(); 3097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci AXObjectCache* cache = document->axObjectCache(); 3107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return cache ? WebAXObject(cache->objectFromAXID(axID)) : WebAXObject(); 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebVector<WebDraggableRegion> WebDocument::draggableRegions() const 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebVector<WebDraggableRegion> draggableRegions; 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Document* document = constUnwrap<Document>(); 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (document->hasAnnotatedRegions()) { 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Vector<AnnotatedRegionValue>& regions = document->annotatedRegions(); 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) draggableRegions = WebVector<WebDraggableRegion>(regions.size()); 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < regions.size(); i++) { 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const AnnotatedRegionValue& value = regions[i]; 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) draggableRegions[i].draggable = value.draggable; 3239e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) draggableRegions[i].bounds = IntRect(value.bounds); 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return draggableRegions; 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 329e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)v8::Handle<v8::Value> WebDocument::registerEmbedderCustomElement(const WebString& name, v8::Handle<v8::Value> options, WebExceptionCode& ec) 330e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 331a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch v8::Isolate* isolate = v8::Isolate::GetCurrent(); 332e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) Document* document = unwrap<Document>(); 333a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch Dictionary dictionary(options, isolate); 33451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 335f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ScriptValue constructor = document->registerElement(ScriptState::current(isolate), name, dictionary, exceptionState, CustomElement::EmbedderNames); 33651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ec = exceptionState.code(); 33751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (exceptionState.hadException()) 338e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) return v8::Handle<v8::Value>(); 339e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) return constructor.v8Value(); 340e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 341e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 3427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebURL WebDocument::manifestURL() const 3437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 3447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const Document* document = constUnwrap<Document>(); 3457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HTMLLinkElement* linkElement = document->linkManifest(); 3467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!linkElement) 3477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebURL(); 3487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return linkElement->href(); 3497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 3507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 351323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)WebDocument::WebDocument(const PassRefPtrWillBeRawPtr<Document>& elem) 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : WebNode(elem) 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 356323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)WebDocument& WebDocument::operator=(const PassRefPtrWillBeRawPtr<Document>& elem) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_private = elem; 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return *this; 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 362323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)WebDocument::operator PassRefPtrWillBeRawPtr<Document>() const 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 364591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return toDocument(m_private.get()); 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 36751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 368