• jer.noble@apple.com's avatar
    Crash in DumpRenderTree at com.apple.WebCore:... · c3419e02
    jer.noble@apple.com authored
    Crash in DumpRenderTree at com.apple.WebCore: WebCore::CaptionUserPreferences::captionPreferencesChanged + 185
    https://bugs.webkit.org/show_bug.cgi?id=112051
    
    Reviewed by Eric Carlson.
    
    No new tests; fixes a crash during media/video-controls-captions-trackmenu.html.
    
    Instead of relying on a registration system which can fail when an element's document does not have a page,
    Elements will register for captionPreferencesChanged() notifications directly with their owning Document.
    CaptionUserPreferences, in turn, will notify all Documents in its PageGroup, rather than only directly
    registered listeners.
    
    * dom/Document.cpp:
    (WebCore::Document::registerForCaptionPreferencesChangedCallbacks): Added. Notify the CaptionUserPreferences that someone
        is interested in captionPreferencesChanged notfications.
    (WebCore::Document::unregisterForCaptionPreferencesChangedCallbacks): Added.
    (WebCore::Document::captionPreferencesChanged): Added. Pass to all registered elements.
    * dom/Document.h:
    * dom/Element.h:
    (WebCore::Element::captionPreferencesChanged): Added. Empty; intended
        to be overridden by subclasses.
    * history/CachedPage.cpp:
    (WebCore::CachedPage::CachedPage): Initialize m_needsCaptionPreferenceChanged member.
    (WebCore::CachedPage::restore): Call captionPreferencesChanged() if necessary.
    * history/CachedPage.h:
    (WebCore::CachedPage::markForCaptionPreferencesChanged): Set the m_needsCaptionPreferenceChanged member.
    * history/PageCache.cpp:
    (WebCore::PageCache::markPagesForCaptionPreferencesChanged): Pass to every CachedPage.
    * history/PageCache.h:
    * html/HTMLMediaElement.cpp:
    (WebCore::HTMLMediaElement::HTMLMediaElement): Register with the Document.
    (WebCore::HTMLMediaElement::~HTMLMediaElement): Unregister with same.
    (WebCore::HTMLMediaElement::attach): Remove previous registration call.
    * html/HTMLMediaElement.h:
    * page/CaptionUserPreferences.cpp:
    (WebCore::CaptionUserPreferences::captionPreferencesChanged): Pass to the
        PageGroup.
    * page/CaptionUserPreferences.h:
    (WebCore::CaptionUserPreferences::setInterestedInCaptionPreferenceChanges):
        Empty; intended to be overridden by subclasses.
    * page/CaptionUserPreferencesMac.h:
    * page/CaptionUserPreferencesMac.mm:
    (WebCore::CaptionUserPreferencesMac::setInterestedInCaptionPreferenceChanges):
        Renamed from registerForPreferencesChangedCallbacks().
    (WebCore::CaptionUserPreferencesMac::captionPreferencesChanged):
        Replace call to havePreferenceChangeListeners() with m_listeningForPreferenceChanges.
    * page/Page.cpp:
    (WebCore::Page::captionPreferencesChanged):
        Pass to every contained Document.
    * page/Page.h:
    * page/CaptionUserPreferences.cpp:
    (WebCore::CaptionUserPreferences::captionPreferencesChanged): Pass to the PageGroup.
    * page/CaptionUserPreferences.h:
    * page/PageGroup.cpp:
    (WebCore::PageGroup::captionPreferencesChanged): Pass to every page, as well as pages in the PageCache.
    * page/PageGroup.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@145826 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    c3419e02
CaptionUserPreferences.h 3.03 KB