Changeset 183951 in webkit


Ignore:
Timestamp:
May 7, 2015 3:16:27 PM (9 years ago)
Author:
yoav@yoav.ws
Message:

Handle meta viewport in HTMLPreloadScanner
https://bugs.webkit.org/show_bug.cgi?id=144640

Reviewed by Dean Jackson.

Source/WebCore:

Add support for the <meta> tag to the HTMLPreloadScanner
and when the meta tag's name is viewport, get the document
to process the tag's attribute value, and set its ViewportArgument.

Tests: fast/dom/HTMLMetaElement/meta-preloader.html

  • html/parser/HTMLPreloadScanner.cpp:

(WebCore::TokenPreloadScanner::tagIdFor): Added meta.
(WebCore::TokenPreloadScanner::initiatorFor): Added meta.
(WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner): Call document.processViewport is meta viewport encountered.
(WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
(WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): Keep track of meta viewport tags.
(WebCore::testPreloadScannerViewportSupport): Testing function that makes sure this functionality is working.

  • html/parser/HTMLPreloadScanner.h:
  • testing/Internals.cpp:

(WebCore::Internals::testPreloaderSettingViewport): Calls the testing function.

  • testing/Internals.h:
  • testing/Internals.idl:

LayoutTests:

Added a layout test that is simply calling an internals method
that tests the HTMLPreloadScanner.

  • fast/dom/HTMLMetaElement/meta-preloader-expected.txt: Added.
  • fast/dom/HTMLMetaElement/meta-preloader.html: Added.
Location:
trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r183950 r183951  
     12015-05-07  Yoav Weiss  <yoav@yoav.ws>
     2
     3        Handle meta viewport in HTMLPreloadScanner
     4        https://bugs.webkit.org/show_bug.cgi?id=144640
     5
     6        Reviewed by Dean Jackson.
     7
     8        Added a layout test that is simply calling an internals method
     9        that tests the HTMLPreloadScanner.
     10
     11        * fast/dom/HTMLMetaElement/meta-preloader-expected.txt: Added.
     12        * fast/dom/HTMLMetaElement/meta-preloader.html: Added.
     13
    1142015-05-07  Zalan Bujtas  <zalan@apple.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r183950 r183951  
     12015-05-07  Yoav Weiss  <yoav@yoav.ws>
     2
     3        Handle meta viewport in HTMLPreloadScanner
     4        https://bugs.webkit.org/show_bug.cgi?id=144640
     5
     6        Reviewed by Dean Jackson.
     7
     8        Add support for the <meta> tag to the HTMLPreloadScanner
     9        and when the meta tag's name is viewport, get the document
     10        to process the tag's attribute value, and set its ViewportArgument.
     11
     12        Tests: fast/dom/HTMLMetaElement/meta-preloader.html
     13
     14        * html/parser/HTMLPreloadScanner.cpp:
     15        (WebCore::TokenPreloadScanner::tagIdFor): Added meta.
     16        (WebCore::TokenPreloadScanner::initiatorFor): Added meta.
     17        (WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner): Call document.processViewport is meta viewport encountered.
     18        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
     19        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): Keep track of meta viewport tags.
     20        (WebCore::testPreloadScannerViewportSupport): Testing function that makes sure this functionality is working.
     21        * html/parser/HTMLPreloadScanner.h:
     22        * testing/Internals.cpp:
     23        (WebCore::Internals::testPreloaderSettingViewport): Calls the testing function.
     24        * testing/Internals.h:
     25        * testing/Internals.idl:
     26
    1272015-05-07  Zalan Bujtas  <zalan@apple.com>
    228
  • trunk/Source/WebCore/html/parser/HTMLPreloadScanner.cpp

    r183920 r183951  
    5959    if (tagName == templateTag)
    6060        return TagId::Template;
     61    if (tagName == metaTag)
     62        return TagId::Meta;
    6163    return TagId::Unknown;
    6264}
     
    7779    case TagId::Base:
    7880    case TagId::Template:
     81    case TagId::Meta:
    7982        ASSERT_NOT_REACHED();
    8083        return "unknown";
     
    8992        : m_tagId(tagId)
    9093        , m_linkIsStyleSheet(false)
     94        , m_metaIsViewport(false)
    9195        , m_inputIsImage(false)
    9296        , m_deviceScaleFactor(deviceScaleFactor)
     
    117121            setUrlToLoad(imageCandidate.string.toString(), true);
    118122        }
     123
     124        if (m_metaIsViewport && !m_metaContent.isNull())
     125            document.processViewport(m_metaContent, ViewportArguments::ViewportMeta);
    119126    }
    120127
     
    167174            else if (match(attributeName, typeAttr))
    168175                m_inputIsImage = equalIgnoringCase(attributeValue, InputTypeNames::image());
     176        } else if (m_tagId == TagId::Meta) {
     177            if (match(attributeName, contentAttr))
     178                m_metaContent = attributeValue;
     179            else if (match(attributeName, nameAttr))
     180                m_metaIsViewport = equalIgnoringCase(attributeValue, "viewport");
    169181        }
    170182    }
     
    237249    bool m_linkIsStyleSheet;
    238250    String m_mediaAttribute;
     251    String m_metaContent;
     252    bool m_metaIsViewport;
    239253    bool m_inputIsImage;
    240254    float m_deviceScaleFactor;
     
    348362}
    349363
    350 }
     364bool testPreloadScannerViewportSupport(Document* document)
     365{
     366    ASSERT(document);
     367    HTMLParserOptions options(*document);
     368    HTMLPreloadScanner scanner(options, document->url());
     369    HTMLResourcePreloader preloader(*document);
     370    scanner.appendToEnd(String("<meta name=viewport content='width=400'>"));
     371    scanner.scan(preloader, *document);
     372    return (document->viewportArguments().width == 400);
     373}
     374
     375}
  • trunk/Source/WebCore/html/parser/HTMLPreloadScanner.h

    r178265 r183951  
    5050        Link,
    5151        Script,
     52        Meta,
    5253
    5354        // These tags are not scanned by the StartTagScanner.
     
    9192};
    9293
     94WEBCORE_EXPORT bool testPreloadScannerViewportSupport(Document*);
     95
    9396}
    9497
  • trunk/Source/WebCore/testing/Internals.cpp

    r183906 r183951  
    5959#include "HTMLNames.h"
    6060#include "HTMLPlugInElement.h"
     61#include "HTMLPreloadScanner.h"
    6162#include "HTMLSelectElement.h"
    6263#include "HTMLTextAreaElement.h"
     
    28352836#endif
    28362837
    2837 }
     2838bool Internals::testPreloaderSettingViewport()
     2839{
     2840    return testPreloadScannerViewportSupport(contextDocument());
     2841}
     2842
     2843}
  • trunk/Source/WebCore/testing/Internals.h

    r183906 r183951  
    396396    RefPtr<File> createFile(const String&);
    397397    void queueMicroTask(int);
     398    bool testPreloaderSettingViewport();
    398399
    399400#if ENABLE(CONTENT_FILTERING)
  • trunk/Source/WebCore/testing/Internals.idl

    r183906 r183951  
    358358    File createFile(DOMString url);
    359359    void queueMicroTask(long testNumber);
     360    boolean testPreloaderSettingViewport();
    360361
    361362    [Conditional=CONTENT_FILTERING] readonly attribute MockContentFilterSettings mockContentFilterSettings;
Note: See TracChangeset for help on using the changeset viewer.