| Index: Source/core/dom/Document.cpp
|
| diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp
|
| index a5dddea9ff27a0d1ab8a4d19beb42ad0897e3fd2..46b6ec0fcb58529b52e0a50fa13bc7f840baedab 100644
|
| --- a/Source/core/dom/Document.cpp
|
| +++ b/Source/core/dom/Document.cpp
|
| @@ -662,11 +662,9 @@ void Document::setDocType(PassRefPtr<DocumentType> docType)
|
| // This should never be called more than once.
|
| ASSERT(!m_docType || !docType);
|
| m_docType = docType;
|
| - if (m_docType) {
|
| + if (m_docType)
|
| this->adoptIfNeeded(m_docType.get());
|
| - if (m_docType->publicId().startsWith("-//wapforum//dtd xhtml mobile 1.", /* caseSensitive */ false))
|
| - processViewport("width=device-width, height=device-height", ViewportArguments::XHTMLMobileProfile);
|
| - }
|
| +
|
| // Doctype affects the interpretation of the stylesheets.
|
| clearStyleResolver();
|
| }
|
| @@ -2039,6 +2037,11 @@ PassRefPtr<DocumentParser> Document::createParser()
|
| return XMLDocumentParser::create(this, view());
|
| }
|
|
|
| +bool Document::isXHTMLMobileProfile() const
|
| +{
|
| + return m_docType && m_docType->publicId().startsWith("-//WAPFORUM//DTD XHTML MOBILE 1.", /* caseSensitive */ false);
|
| +}
|
| +
|
| bool Document::isFrameSet() const
|
| {
|
| if (!isHTMLDocument())
|
| @@ -2841,76 +2844,6 @@ void Document::processHttpEquivXFrameOptions(const String& content)
|
| }
|
| }
|
|
|
| -// Though isspace() considers \t and \v to be whitespace, Win IE doesn't.
|
| -static bool isSeparator(UChar c)
|
| -{
|
| - return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '=' || c == ',' || c == '\0';
|
| -}
|
| -
|
| -void Document::processArguments(const String& features, void* data, ArgumentsCallback callback)
|
| -{
|
| - // Tread lightly in this code -- it was specifically designed to mimic Win IE's parsing behavior.
|
| - int keyBegin, keyEnd;
|
| - int valueBegin, valueEnd;
|
| -
|
| - int i = 0;
|
| - int length = features.length();
|
| - String buffer = features.lower();
|
| - while (i < length) {
|
| - // skip to first non-separator, but don't skip past the end of the string
|
| - while (isSeparator(buffer[i])) {
|
| - if (i >= length)
|
| - break;
|
| - i++;
|
| - }
|
| - keyBegin = i;
|
| -
|
| - // skip to first separator
|
| - while (!isSeparator(buffer[i]))
|
| - i++;
|
| - keyEnd = i;
|
| -
|
| - // skip to first '=', but don't skip past a ',' or the end of the string
|
| - while (buffer[i] != '=') {
|
| - if (buffer[i] == ',' || i >= length)
|
| - break;
|
| - i++;
|
| - }
|
| -
|
| - // skip to first non-separator, but don't skip past a ',' or the end of the string
|
| - while (isSeparator(buffer[i])) {
|
| - if (buffer[i] == ',' || i >= length)
|
| - break;
|
| - i++;
|
| - }
|
| - valueBegin = i;
|
| -
|
| - // skip to first separator
|
| - while (!isSeparator(buffer[i]))
|
| - i++;
|
| - valueEnd = i;
|
| -
|
| - ASSERT_WITH_SECURITY_IMPLICATION(i <= length);
|
| -
|
| - String keyString = buffer.substring(keyBegin, keyEnd - keyBegin);
|
| - String valueString = buffer.substring(valueBegin, valueEnd - valueBegin);
|
| - callback(keyString, valueString, this, data);
|
| - }
|
| -}
|
| -
|
| -void Document::processViewport(const String& features, ViewportArguments::Type origin)
|
| -{
|
| - ASSERT(!features.isNull());
|
| -
|
| - if (origin < m_viewportArguments.type)
|
| - return;
|
| -
|
| - m_viewportArguments = ViewportArguments(origin);
|
| - processArguments(features, (void*)&m_viewportArguments, &setViewportFeature);
|
| -
|
| - updateViewportArguments();
|
| -}
|
| -
|
| void Document::updateViewportArguments()
|
| {
|
| if (page() && page()->mainFrame() == frame()) {
|
|
|