1/* 2 * Copyright (C) 2012, 2013 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef CaptionUserPreferences_h 27#define CaptionUserPreferences_h 28 29#if ENABLE(VIDEO_TRACK) 30 31#include "Language.h" 32#include "LocalizedStrings.h" 33#include "TextTrack.h" 34#include "Timer.h" 35#include <wtf/PassOwnPtr.h> 36#include <wtf/text/AtomicString.h> 37 38namespace WebCore { 39 40class HTMLMediaElement; 41class PageGroup; 42class TextTrackList; 43 44class CaptionUserPreferences { 45public: 46 static PassOwnPtr<CaptionUserPreferences> create(PageGroup* group) { return adoptPtr(new CaptionUserPreferences(group)); } 47 virtual ~CaptionUserPreferences(); 48 49 enum CaptionDisplayMode { 50 Automatic, 51 ForcedOnly, 52 AlwaysOn 53 }; 54 virtual CaptionDisplayMode captionDisplayMode() const; 55 virtual void setCaptionDisplayMode(CaptionDisplayMode); 56 57 virtual int textTrackSelectionScore(TextTrack*, HTMLMediaElement*) const; 58 virtual int textTrackLanguageSelectionScore(TextTrack*, const Vector<String>&) const; 59 60 virtual bool userPrefersCaptions() const; 61 virtual void setUserPrefersCaptions(bool); 62 63 virtual bool userPrefersSubtitles() const; 64 virtual void setUserPrefersSubtitles(bool preference); 65 66 virtual bool userPrefersTextDescriptions() const; 67 virtual void setUserPrefersTextDescriptions(bool preference); 68 69 virtual float captionFontSizeScaleAndImportance(bool& important) const { important = false; return 0.05f; } 70 71 virtual String captionsStyleSheetOverride() const { return m_captionsStyleSheetOverride; } 72 virtual void setCaptionsStyleSheetOverride(const String&); 73 74 virtual void setInterestedInCaptionPreferenceChanges() { } 75 76 virtual void captionPreferencesChanged(); 77 78 virtual void setPreferredLanguage(const String&); 79 virtual Vector<String> preferredLanguages() const; 80 81 virtual String displayNameForTrack(TextTrack*) const; 82 virtual Vector<RefPtr<TextTrack> > sortedTrackListForMenu(TextTrackList*); 83 84 void setPrimaryAudioTrackLanguageOverride(const String& language) { m_primaryAudioTrackLanguageOverride = language; } 85 String primaryAudioTrackLanguageOverride() const; 86 87 virtual bool testingMode() const { return m_testingMode; } 88 virtual void setTestingMode(bool override) { m_testingMode = override; } 89 90 PageGroup* pageGroup() const { return m_pageGroup; } 91 92protected: 93 CaptionUserPreferences(PageGroup*); 94 void updateCaptionStyleSheetOveride(); 95 96private: 97 void timerFired(Timer<CaptionUserPreferences>*); 98 void notify(); 99 100 PageGroup* m_pageGroup; 101 CaptionDisplayMode m_displayMode; 102 Timer<CaptionUserPreferences> m_timer; 103 String m_userPreferredLanguage; 104 String m_captionsStyleSheetOverride; 105 String m_primaryAudioTrackLanguageOverride; 106 bool m_testingMode; 107 bool m_havePreferences; 108}; 109 110} 111#endif 112 113#endif 114