2009-07-02 Pierre d'Herbemont <pdherbemont@apple.com>
authoreric.carlson@apple.com <eric.carlson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Jul 2009 15:47:55 +0000 (15:47 +0000)
committereric.carlson@apple.com <eric.carlson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Jul 2009 15:47:55 +0000 (15:47 +0000)
        Reviewed by Simon Fraser.

        <rdar://problem/6518119>

        Add a rewind button and hide the timeline for live broadcasts when
        in MediaUI mode.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add the new pseudo element.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h:

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Ditto.

        * css/CSSValueKeywords.in: Ditto.
        * css/mediaControls.css: Ditto.
        * css/mediaControlsQT.css: Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::rewind): New.
        (WebCore::HTMLMediaElement::returnToRealTime): New.
        (WebCore::HTMLMediaElement::isStreaming): New.
        * html/HTMLMediaElement.h:

        * page/mac/WebCoreViewFactory.h: Declare mediaElementLoadingStateText and mediaElementLiveBroadcastStateText.

        * platform/LocalizedStrings.h: Add localized media state messages.

        * platform/ThemeTypes.h: Add the new pseudo element.

        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::mediaElementLoadingStateText): Add localized media state.
        (WebCore::mediaElementLiveBroadcastStateText): Ditto.

        * platform/mac/WebCoreSystemInterface.h: Change BOOL param wkDrawMediaUIPart to an int to support
           multiple states.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::MediaControlElement): Deal with new elements.
        (WebCore::MediaControlElement::attachToParent): Ditto.
        (WebCore::MediaControlElement::update): Ditto.
        (WebCore::MediaControlElement::updateStyle): Ditto.
        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement): Ditto.
        (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement): Ditto.
        (WebCore::MediaControlStatusDisplayElement::update): Ditto.
        (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlInputElement::MediaControlInputElement): Ditto.
        (WebCore::MediaControlInputElement::attachToParent): Ditto.
        (WebCore::MediaControlInputElement::updateStyle): Ditto.
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Ditto.
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlTimelineElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlTimelineElement::update): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::rendererIsNeeded): Ditto.
        * rendering/MediaControlElements.h: Ditto.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::styleDidChange): Deal with the new elements.
        (WebCore::RenderMedia::createPanel): Ditto.
        (WebCore::RenderMedia::createRewindButton): Ditto.
        (WebCore::RenderMedia::createReturnToRealtimeButton): Ditto.
        (WebCore::RenderMedia::createStatusDisplay): Ditto.
        (WebCore::RenderMedia::createTimelineContainer): Ditto.
        (WebCore::RenderMedia::createCurrentTimeDisplay): Ditto.
        (WebCore::RenderMedia::createTimeRemainingDisplay): Ditto.
        (WebCore::RenderMedia::updateControls): Ditto.
        (WebCore::RenderMedia::forwardEvent): Ditto.
        * rendering/RenderMedia.h:

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Deal with the new elements.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMediaRewindButton): Deal with the new elements.
        (WebCore::RenderTheme::paintMediaReturnToRealtimeButton): Ditto.
        (WebCore::RenderTheme::paintMediaControlsBackground): Ditto.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaRewindButton): Deal with the new elements.
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton): Ditto.
        (WebCore::RenderThemeMac::paintMediaControlsBackground): Ditto.

        * rendering/style/RenderStyleConstants.h: Add constants for the new elements.

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6518119>

        Add localized strings for media controller status messages.

        * English.lproj/Localizable.strings: Localized text.

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6518119>

        Add localized strings for media controller status.

        * WebCoreSupport/WebViewFactory.mm: Add new localized text.
        (-[WebViewFactory mediaElementLoadingStateText]):
        (-[WebViewFactory mediaElementLiveBroadcastStateText]):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Update WebKitSystemInterface for <rdar://problem/6518119>

        * WebKitSystemInterface.h:
        * libWebKitSystemInterfaceLeopard.a:
        * libWebKitSystemInterfaceSnowLeopard.a:
        * libWebKitSystemInterfaceTiger.a:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@45474 268f45cc-cd09-0410-ab3c-d52691b4dbfc

36 files changed:
LayoutTests/ChangeLog
LayoutTests/media/video-empty-source.html
WebCore/ChangeLog
WebCore/css/CSSPrimitiveValueMappings.h
WebCore/css/CSSSelector.cpp
WebCore/css/CSSSelector.h
WebCore/css/CSSStyleSelector.cpp
WebCore/css/CSSValueKeywords.in
WebCore/css/mediaControls.css
WebCore/css/mediaControlsQT.css
WebCore/html/HTMLMediaElement.cpp
WebCore/html/HTMLMediaElement.h
WebCore/page/mac/WebCoreViewFactory.h
WebCore/platform/LocalizedStrings.h
WebCore/platform/ThemeTypes.h
WebCore/platform/mac/LocalizedStringsMac.mm
WebCore/platform/mac/WebCoreSystemInterface.h
WebCore/platform/mac/WebCoreSystemInterface.mm
WebCore/rendering/MediaControlElements.cpp
WebCore/rendering/MediaControlElements.h
WebCore/rendering/RenderMedia.cpp
WebCore/rendering/RenderMedia.h
WebCore/rendering/RenderTheme.cpp
WebCore/rendering/RenderTheme.h
WebCore/rendering/RenderThemeMac.h
WebCore/rendering/RenderThemeMac.mm
WebCore/rendering/style/RenderStyleConstants.h
WebKit/ChangeLog
WebKit/English.lproj/Localizable.strings
WebKit/mac/ChangeLog
WebKit/mac/WebCoreSupport/WebViewFactory.mm
WebKitLibraries/ChangeLog
WebKitLibraries/WebKitSystemInterface.h
WebKitLibraries/libWebKitSystemInterfaceLeopard.a
WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a
WebKitLibraries/libWebKitSystemInterfaceTiger.a

index 93b09305fccfb01d5cdf0f54e05089840ca87f43..c792a3bda98ccf1edefa48ea6c7708efe3f3f1ec 100644 (file)
@@ -1,3 +1,14 @@
+2009-07-02  Eric Carlson  <eric.carlson@apple.com>
+
+        Reviewed by Simon Fraser.
+
+        <rdar://problem/6518119>
+
+        Delay dumping the render tree because the media controller may not be done with
+        layout immediately.
+
+        * media/video-empty-source.html:
+
 2009-07-02  Antonio Gomes   <antonio.gomes@openbossa.org>
 
         Reviewed by Simon Hausmann.
index a06ec45880727d695bc0f15991af2a7a74e97016..3c0804a79e48b954cfd6fc7b72c6729a7575146a 100644 (file)
@@ -1,5 +1,18 @@
-<body>
-<p>Slider drawing with no source. The controls should render correctly.</p>
-<video src="" controls style="border:1px solid black"></video>
-</div>
-</body>
+<html>
+    <head>
+        <script>
+            if (window.layoutTestController)
+                layoutTestController.waitUntilDone();
+    
+            function test()
+            {
+                if (window.layoutTestController)
+                    layoutTestController.notifyDone();
+            }
+        </script>
+    </head>
+    <body onload="setTimeout(test, 250)">
+        <p>Slider drawing with no source. The controls should render correctly.</p>
+        <video src="" controls style="border:1px solid black"></video>
+    </body>
+</html>
index cad498175091119082017cdbc594546df3e50859..8d1f67c5f6e9adb50c3e8b394004ac27e46ee030 100644 (file)
@@ -1,3 +1,98 @@
+2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>
+
+        Reviewed by Simon Fraser.
+
+        <rdar://problem/6518119>
+
+        Add a rewind button and hide the timeline for live broadcasts when
+        in MediaUI mode.
+
+        * css/CSSPrimitiveValueMappings.h: 
+        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add the new pseudo element.
+
+        * css/CSSSelector.cpp:
+        (WebCore::CSSSelector::extractPseudoType): Ditto.
+        * css/CSSSelector.h: 
+
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Ditto.
+
+        * css/CSSValueKeywords.in: Ditto.
+        * css/mediaControls.css: Ditto.
+        * css/mediaControlsQT.css: Ditto.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::rewind): New.
+        (WebCore::HTMLMediaElement::returnToRealTime): New.
+        (WebCore::HTMLMediaElement::isStreaming): New.
+        * html/HTMLMediaElement.h:
+
+        * page/mac/WebCoreViewFactory.h: Declare mediaElementLoadingStateText and mediaElementLiveBroadcastStateText.
+
+        * platform/LocalizedStrings.h: Add localized media state messages.
+
+        * platform/ThemeTypes.h: Add the new pseudo element.
+
+        * platform/mac/LocalizedStringsMac.mm: 
+        (WebCore::mediaElementLoadingStateText): Add localized media state.
+        (WebCore::mediaElementLiveBroadcastStateText): Ditto.
+
+        * platform/mac/WebCoreSystemInterface.h: Change BOOL param wkDrawMediaUIPart to an int to support
+           multiple states.
+        * platform/mac/WebCoreSystemInterface.mm: Ditto.
+
+        * rendering/MediaControlElements.cpp: 
+        (WebCore::MediaControlElement::MediaControlElement): Deal with new elements.
+        (WebCore::MediaControlElement::attachToParent): Ditto.
+        (WebCore::MediaControlElement::update): Ditto.
+        (WebCore::MediaControlElement::updateStyle): Ditto.
+        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement): Ditto.
+        (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded): Ditto.
+        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement): Ditto.
+        (WebCore::MediaControlStatusDisplayElement::update): Ditto.
+        (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded): Ditto.
+        (WebCore::MediaControlInputElement::MediaControlInputElement): Ditto.
+        (WebCore::MediaControlInputElement::attachToParent): Ditto.
+        (WebCore::MediaControlInputElement::updateStyle): Ditto.
+        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Ditto.
+        (WebCore::MediaControlRewindButtonElement::defaultEventHandler): Ditto.
+        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Ditto.
+        (WebCore::MediaControlReturnToRealtimeButtonElement::defaultEventHandler): Ditto.
+        (WebCore::MediaControlReturnToRealtimeButtonElement::rendererIsNeeded): Ditto.
+        (WebCore::MediaControlTimelineElement::defaultEventHandler): Ditto.
+        (WebCore::MediaControlTimelineElement::update): Ditto.
+        (WebCore::MediaControlFullscreenButtonElement::rendererIsNeeded): Ditto.
+        * rendering/MediaControlElements.h: Ditto.
+
+        * rendering/RenderMedia.cpp: 
+        (WebCore::RenderMedia::styleDidChange): Deal with the new elements.
+        (WebCore::RenderMedia::createPanel): Ditto.
+        (WebCore::RenderMedia::createRewindButton): Ditto.
+        (WebCore::RenderMedia::createReturnToRealtimeButton): Ditto.
+        (WebCore::RenderMedia::createStatusDisplay): Ditto.
+        (WebCore::RenderMedia::createTimelineContainer): Ditto.
+        (WebCore::RenderMedia::createCurrentTimeDisplay): Ditto.
+        (WebCore::RenderMedia::createTimeRemainingDisplay): Ditto.
+        (WebCore::RenderMedia::updateControls): Ditto.
+        (WebCore::RenderMedia::forwardEvent): Ditto.
+        * rendering/RenderMedia.h:
+
+        * rendering/RenderTheme.cpp:
+        (WebCore::RenderTheme::paint): Deal with the new elements.
+
+        * rendering/RenderTheme.h:
+        (WebCore::RenderTheme::paintMediaRewindButton): Deal with the new elements.
+        (WebCore::RenderTheme::paintMediaReturnToRealtimeButton): Ditto.
+        (WebCore::RenderTheme::paintMediaControlsBackground): Ditto.
+
+        * rendering/RenderThemeMac.h:
+        * rendering/RenderThemeMac.mm:
+        (WebCore::RenderThemeMac::paintMediaRewindButton): Deal with the new elements.
+        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton): Ditto.
+        (WebCore::RenderThemeMac::paintMediaControlsBackground): Ditto.
+
+        * rendering/style/RenderStyleConstants.h: Add constants for the new elements.
+
 2009-07-01  John Abd-El-Malek  <jam@chromium.org>
 
         Reviewed by Darin Fisher.
index fd1d203f0b872f64a2af20dc69e820aabecae1a2..1dd2a2d789bb702a04c9f749ec26cdd75cdf0518 100644 (file)
@@ -215,14 +215,20 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e)
         case MediaSeekForwardButtonPart:
             m_value.ident = CSSValueMediaSeekForwardButton;
             break;
+        case MediaRewindButtonPart:
+            m_value.ident = CSSValueMediaRewindButton;
+            break;
+        case MediaReturnToRealtimeButtonPart:
+            m_value.ident = CSSValueMediaReturnToRealtimeButton;
+            break;
         case MediaSliderPart:
             m_value.ident = CSSValueMediaSlider;
             break;
         case MediaSliderThumbPart:
             m_value.ident = CSSValueMediaSliderthumb;
             break;
-        case MediaTimelineContainerPart:
-            m_value.ident = CSSValueMediaTimelineContainer;
+        case MediaControlsBackgroundPart:
+            m_value.ident = CSSValueMediaControlsBackground;
             break;
         case MediaCurrentTimePart:
             m_value.ident = CSSValueMediaCurrentTimeDisplay;
index 17fbd64cd59e30bcdf5f74d5a42e3e6d52ed192f..5429c16f4089876ded314a4cdc0686af256e3125 100644 (file)
@@ -107,6 +107,9 @@ void CSSSelector::extractPseudoType() const
     DEFINE_STATIC_LOCAL(AtomicString, mediaControlsTimeline, ("-webkit-media-controls-timeline"));
     DEFINE_STATIC_LOCAL(AtomicString, mediaControlsSeekBackButton, ("-webkit-media-controls-seek-back-button"));
     DEFINE_STATIC_LOCAL(AtomicString, mediaControlsSeekForwardButton, ("-webkit-media-controls-seek-forward-button"));
+    DEFINE_STATIC_LOCAL(AtomicString, mediaControlsRewindButton, ("-webkit-media-controls-rewind-button"));
+    DEFINE_STATIC_LOCAL(AtomicString, mediaControlsReturnToRealtimeButton, ("-webkit-media-controls-return-to-realtime-button"));
+    DEFINE_STATIC_LOCAL(AtomicString, mediaControlsStatusDisplay, ("-webkit-media-controls-status-display"));
     DEFINE_STATIC_LOCAL(AtomicString, mediaControlsFullscreenButton, ("-webkit-media-controls-fullscreen-button"));
     DEFINE_STATIC_LOCAL(AtomicString, mediaControlsTimelineContainer, ("-webkit-media-controls-timeline-container"));
     DEFINE_STATIC_LOCAL(AtomicString, mediaControlsCurrentTimeDisplay, ("-webkit-media-controls-current-time-display"));
@@ -236,6 +239,15 @@ void CSSSelector::extractPseudoType() const
     } else if (m_value == mediaControlsSeekForwardButton) {
         m_pseudoType = PseudoMediaControlsSeekForwardButton;
         element = true;
+    } else if (m_value == mediaControlsRewindButton) {
+        m_pseudoType = PseudoMediaControlsRewindButton;
+        element = true;
+    } else if (m_value == mediaControlsReturnToRealtimeButton) {
+        m_pseudoType = PseudoMediaControlsReturnToRealtimeButton;
+        element = true;
+    } else if (m_value == mediaControlsStatusDisplay) {
+        m_pseudoType = PseudoMediaControlsStatusDisplay;
+        element = true;
     } else if (m_value == mediaControlsFullscreenButton) {
         m_pseudoType = PseudoMediaControlsFullscreenButton;
         element = true;
index 728c34d6a5647f842928966a48930f9d978a936f..b24f057e8c6cc31a86ff4ede41254db4aed6e47b 100644 (file)
@@ -173,6 +173,9 @@ namespace WebCore {
             PseudoMediaControlsTimeline,
             PseudoMediaControlsSeekBackButton,
             PseudoMediaControlsSeekForwardButton,
+            PseudoMediaControlsRewindButton,
+            PseudoMediaControlsReturnToRealtimeButton,
+            PseudoMediaControlsStatusDisplay,
             PseudoMediaControlsFullscreenButton
         };
 
index 4182d9c2a58c5cf11c6b542989ceec07e289a625..f415e6c8c0accb8694cf3ca377f44ee58a51e13c 100644 (file)
@@ -2497,6 +2497,15 @@ bool CSSStyleSelector::SelectorChecker::checkOneSelector(CSSSelector* sel, Eleme
             case CSSSelector::PseudoMediaControlsSeekForwardButton:
                 dynamicPseudo = MEDIA_CONTROLS_SEEK_FORWARD_BUTTON;
                 return true;
+            case CSSSelector::PseudoMediaControlsRewindButton:
+                dynamicPseudo = MEDIA_CONTROLS_REWIND_BUTTON;
+                return true;
+            case CSSSelector::PseudoMediaControlsReturnToRealtimeButton:
+                dynamicPseudo = MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON;
+                return true;
+            case CSSSelector::PseudoMediaControlsStatusDisplay:
+                dynamicPseudo = MEDIA_CONTROLS_STATUS_DISPLAY;
+                return true;
             case CSSSelector::PseudoMediaControlsFullscreenButton:
                 dynamicPseudo = MEDIA_CONTROLS_FULLSCREEN_BUTTON;
                 return true;
index 698dffe6fade13edd922ddd2c1c5a8074afa79b2..dac7567fa56299a928597deb4914e82fbe6b57b5 100644 (file)
@@ -504,9 +504,11 @@ media-mute-button
 media-play-button
 media-seek-back-button
 media-seek-forward-button
+media-rewind-button
+media-return-to-realtime-button
 media-slider
 media-sliderthumb
-media-timeline-container
+media-controls-background
 media-current-time-display
 media-time-remaining-display
 menulist
index 668458ca9232e76cd91c85a3499a3c9088d2b0ba..f9694f8f0709b8d1989013bd91c8fee8e3aa825d 100644 (file)
@@ -32,6 +32,7 @@ audio {
 audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel {
     display: -webkit-box;
     -webkit-box-orient: horizontal;
+    -webkit-box-align: center;
     -webkit-user-select: none;
     position: absolute;
     bottom: 0;
@@ -61,7 +62,7 @@ audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-bu
 }
 
 audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container {
-    -webkit-appearance: media-timeline-container;
+    -webkit-appearance: media-controls-background;
     display: -webkit-box;
     -webkit-box-orient: horizontal;
     -webkit-box-align: center;
@@ -102,6 +103,16 @@ audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls
 }
 
 audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button {
+    -webkit-appearance: media-fullscreen-button;
+    display: -webkit-box;
+    width: 16px;
+    height: 16px;
+}
+
+audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button {
     display: none;
 }
 
+audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button {
+    display: none;
+}
index 900dcf24332f98dced36877ef8740d3f4545cacf..87169ccc131d384f9f6caec57b8e0d59eb47df7b 100644 (file)
@@ -31,6 +31,7 @@ audio {
 
 audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel {
     /* In mediaControls.css */
+    -webkit-appearance: media-controls-background;
     height: 25px;
 }
 
@@ -39,17 +40,22 @@ video:-webkit-full-page-media::-webkit-media-controls-panel {
 }
 
 audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button {
-    -webkit-box-ordinal-group: 2; /* At the end of the controller bar */
-    width: 30px;
-    height: 25px;
+    -webkit-box-ordinal-group: 2; /* Before the fullscreen button */
+    width: 16px;
+    height: 16px;
+    margin-left: 7px;
+    margin-right: 7px;
 }
 
 audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button {
-    width: 30px;
-    height: 25px;
+    width: 16px;
+    height: 16px;
+    margin-left: 7px;
+    margin-right: 7px;
 }
 
 audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container {
+    -webkit-appearance: none;
     height: 25px;
 }
 
@@ -63,7 +69,7 @@ audio::-webkit-media-controls-current-time-display, video::-webkit-media-control
     text-align: center;
     overflow: hidden;
     line-height: 13px;
-    height: 14px;
+    height: 13px;
     width: 45px;
 }
 
@@ -77,7 +83,7 @@ audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-contr
     text-align: center;
     overflow: hidden;
     line-height: 13px;
-    height: 14px;
+    height: 13px;
     width: 45px;
 }
 
@@ -96,5 +102,41 @@ audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls
 }
 
 audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button {
-    display: none;
+    width: 16px;
+    height: 16px;
+    margin-left: 7px;
+    margin-right: 7px;
+    -webkit-box-ordinal-group: 3; /* At the very end */
+}
+
+audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button {
+    -webkit-appearance: media-rewind-button;
+    display: -webkit-box;
+    width: 16px;
+    height: 16px;
+    margin-left: 7px;
+    margin-right: 7px;
+}
+
+audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button {
+    -webkit-appearance: media-return-to-realtime-button;
+    display: -webkit-box;
+    width: 16px;
+    height: 16px;
+    margin-left: 7px;
+    margin-right: 7px;
+}
+
+audio::-webkit-media-controls-status-display, video::-webkit-media-controls-status-display {
+    -webkit-user-select: none;
+    display: -webkit-box;
+    -webkit-box-flex: 1;
+    font: -webkit-small-control;
+    color: white;
+    font-size: 0.6em;
+    line-height: 13px;
+    overflow: hidden;
+    text-shadow: 1px 1px 0px black;
+    margin-left: 10px;
+    margin-right: 10px;
 }
index 86cb9610730623ad2f1c892d4d81f0d6515d6db8..92a0db007158f592c2dbcb5ffe8bed496779f4bc 100644 (file)
@@ -837,6 +837,18 @@ void HTMLMediaElement::progressEventTimerFired(Timer<HTMLMediaElement>*)
     }
 }
 
+void HTMLMediaElement::rewind(float timeDelta)
+{
+    ExceptionCode e;
+    setCurrentTime(max(currentTime() - timeDelta, minTimeSeekable()), e);
+}
+
+void HTMLMediaElement::returnToRealtime()
+{
+    ExceptionCode e;
+    setCurrentTime(maxTimeSeekable(), e);
+}  
+    
 void HTMLMediaElement::seek(float time, ExceptionCode& ec)
 {
     // 4.8.10.10. Seeking
@@ -889,6 +901,12 @@ HTMLMediaElement::ReadyState HTMLMediaElement::readyState() const
     return m_readyState;
 }
 
+bool HTMLMediaElement::isStreaming() const
+{
+    MediaPlayer::MovieLoadType loadType = m_player ? m_player->movieLoadType() : MediaPlayer::Unknown;
+    return loadType == MediaPlayer::LiveStream;
+}
+
 bool HTMLMediaElement::seeking() const
 {
     return m_seeking;
@@ -1406,9 +1424,9 @@ PassRefPtr<TimeRanges> HTMLMediaElement::played() const
 PassRefPtr<TimeRanges> HTMLMediaElement::seekable() const
 {
     // FIXME real ranges support
-    if (!m_player || !m_player->maxTimeSeekable())
+    if (!maxTimeSeekable())
         return TimeRanges::create();
-    return TimeRanges::create(0, m_player->maxTimeSeekable());
+    return TimeRanges::create(minTimeSeekable(), maxTimeSeekable());
 }
 
 bool HTMLMediaElement::potentiallyPlaying() const
@@ -1442,6 +1460,16 @@ bool HTMLMediaElement::pausedForUserInteraction() const
     return false;
 }
 
+float HTMLMediaElement::minTimeSeekable() const
+{
+    return 0;
+}
+
+float HTMLMediaElement::maxTimeSeekable() const
+{
+    return m_player ? m_player->maxTimeSeekable() : 0;
+}
+    
 void HTMLMediaElement::updateVolume()
 {
     if (!m_player)
index 8d238d5f10650483fd506a681b7a7a7e75be8ef6..ff7b953daea063eeb979440094e462d4f1e6b82f 100644 (file)
@@ -66,6 +66,9 @@ public:
     virtual bool isVideo() const { return false; }
     virtual bool hasVideo() const { return false; }
 
+    void rewind(float timeDelta);
+    void returnToRealtime();
+    
     virtual bool supportsFullscreen() const { return false; }
 
     void scheduleLoad();
@@ -95,6 +98,8 @@ public:
     void load(ExceptionCode&);
     String canPlayType(const String& mimeType) const;
 
+    bool isStreaming() const;
+
 // ready state
     enum ReadyState { HAVE_NOTHING, HAVE_METADATA, HAVE_CURRENT_DATA, HAVE_FUTURE_DATA, HAVE_ENOUGH_DATA };
     ReadyState readyState() const;
@@ -221,6 +226,9 @@ private:
     bool stoppedDueToErrors() const;
     bool pausedForUserInteraction() const;
 
+    float minTimeSeekable() const;
+    float maxTimeSeekable() const;
+
     // Restrictions to change default behaviors. This is a effectively a compile time choice at the moment
     //  because there are no accessor methods.
     enum BehaviorRestrictions 
index c18f4d4e735bf9270c781372b1e2d643ecce55d1..d4dc8215b20fdf413c32db353a1030ee9db62303 100644 (file)
 // FTP Directory Related
 - (NSString *)unknownFileSizeText;
 
+- (NSString *)mediaElementLoadingStateText;
+- (NSString *)mediaElementLiveBroadcastStateText;
+
 @end
 
 @interface WebCoreViewFactory : NSObject
index b6ec87847486af13a1a57d061b9f336a2df59dea..7c586d3a109df1973636689d4979224d3a7b510b 100644 (file)
@@ -132,6 +132,9 @@ namespace WebCore {
 #endif
 
     String imageTitle(const String& filename, const IntSize& size);
+
+    String mediaElementLoadingStateText();
+    String mediaElementLiveBroadcastStateText();
 }
 
 #endif
index ae85a63880f043b003cf79d3dcbd7b0ea8a9e812..b7636750f7cd67ce72f289024ec3a5f5e391b90d 100644 (file)
@@ -43,12 +43,15 @@ enum ControlState {
 
 typedef unsigned ControlStates;
 
+// Must follow CSSValueKeywords.in order
 enum ControlPart {
     NoControlPart, CheckboxPart, RadioPart, PushButtonPart, SquareButtonPart, ButtonPart,
     ButtonBevelPart, DefaultButtonPart, ListboxPart, ListItemPart, 
     MediaFullscreenButtonPart, MediaMuteButtonPart, MediaPlayButtonPart, MediaSeekBackButtonPart, 
-    MediaSeekForwardButtonPart, MediaSliderPart, MediaSliderThumbPart, MediaTimelineContainerPart,
-    MediaCurrentTimePart, MediaTimeRemainingPart, 
+    MediaSeekForwardButtonPart, MediaRewindButtonPart, MediaReturnToRealtimeButtonPart,
+    MediaSliderPart,
+    MediaSliderThumbPart, MediaControlsBackgroundPart,
+    MediaCurrentTimePart, MediaTimeRemainingPart,
     MenulistPart, MenulistButtonPart, MenulistTextPart, MenulistTextFieldPart,
     SliderHorizontalPart, SliderVerticalPart, SliderThumbHorizontalPart,
     SliderThumbVerticalPart, CaretPart, SearchFieldPart, SearchFieldDecorationPart,
index ebb6d937aecd0c743605dd2e92a0d314cbd96336..fdd7df5ddbbf4b1cf513e279c6894b4f8760bc00 100644 (file)
@@ -697,4 +697,20 @@ String imageTitle(const String& filename, const IntSize& size)
     return String();
 }
 
+String mediaElementLoadingStateText()
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    return [[WebCoreViewFactory sharedFactory] mediaElementLoadingStateText];
+    END_BLOCK_OBJC_EXCEPTIONS;
+    return String();
+}
+
+String mediaElementLiveBroadcastStateText()
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    return [[WebCoreViewFactory sharedFactory] mediaElementLiveBroadcastStateText];
+    END_BLOCK_OBJC_EXCEPTIONS;
+    return String();
+}
+
 }
index ec745bc98aaa9754b081ad9a9b010907afe71d03..b0860e7a56942995edf8fcca30790b06198c062e 100644 (file)
@@ -105,7 +105,7 @@ extern NSFont* (*wkGetFontInLanguageForRange)(NSFont*, NSString*, NSRange);
 extern NSFont* (*wkGetFontInLanguageForCharacter)(NSFont*, UniChar);
 extern BOOL (*wkGetGlyphTransformedAdvances)(CGFontRef, NSFont*, CGAffineTransform*, ATSGlyphRef*, CGSize* advance);
 extern void (*wkDrawMediaSliderTrack)(int themeStyle, CGContextRef context, CGRect rect, float timeLoaded, float currentTime, float duration);
-extern void (*wkDrawMediaUIPart)(int part, int themeStyle, CGContextRef context, CGRect rect, BOOL active);
+extern void (*wkDrawMediaUIPart)(int part, int themeStyle, CGContextRef context, CGRect rect, int state);
 extern NSString* (*wkGetPreferredExtensionForMIMEType)(NSString*);
 extern NSArray* (*wkGetExtensionsForMIMEType)(NSString*);
 extern NSString* (*wkGetMIMETypeForExtension)(NSString*);
index 0421d67c53083f1212908a83a6840f8047682760..c07b3d052b2f52b29187458c330ca0d06c39c261 100644 (file)
@@ -41,7 +41,7 @@ NSFont* (*wkGetFontInLanguageForCharacter)(NSFont*, UniChar);
 BOOL (*wkGetGlyphTransformedAdvances)(CGFontRef, NSFont*, CGAffineTransform*, ATSGlyphRef*, CGSize* advance);
 void (*wkDrawMediaSliderTrack)(int themeStyle, CGContextRef context, CGRect rect, float timeLoaded, float currentTime, float duration);
 BOOL (*wkHitTestMediaUIPart)(int part, int themeStyle, CGRect bounds, CGPoint point);
-void (*wkDrawMediaUIPart)(int part, int themeStyle, CGContextRef context, CGRect rect, BOOL active);
+void (*wkDrawMediaUIPart)(int part, int themeStyle, CGContextRef context, CGRect rect, int state);
 void (*wkMeasureMediaUIPart)(int part, int themeStyle, CGRect *bounds, CGSize *naturalSize);
 NSString* (*wkGetPreferredExtensionForMIMEType)(NSString*);
 NSArray* (*wkGetExtensionsForMIMEType)(NSString*);
index fc2790ca4e4b3ee1d56787937b1229c9a1a7cc0e..e7b174165c55d503e6b598c3f5df041b478c36fa 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "MediaControlElements.h"
 
+#import "LocalizedStrings.h"
 #include "EventNames.h"
 #include "FloatConversion.h"
 #include "Frame.h"
@@ -40,6 +41,7 @@
 #include "RenderMedia.h"
 #include "RenderSlider.h"
 #include "RenderTheme.h"
+#include "CString.h"
 
 namespace WebCore {
 
@@ -73,52 +75,131 @@ void MediaControlShadowRootElement::updateStyle()
     }
 }
 
+
 // ----------------------------
+    
 
-MediaTextDisplayElement::MediaTextDisplayElement(Document* doc, PseudoId pseudo, HTMLMediaElement* mediaElement) 
+MediaControlElement::MediaControlElement(Document* doc, PseudoId pseudo, HTMLMediaElement* mediaElement) 
     : HTMLDivElement(divTag, doc)
     , m_mediaElement(mediaElement)
     , m_pseudoStyleId(pseudo)
 {
-    RenderStyle* style = m_mediaElement->renderer()->getCachedPseudoStyle(m_pseudoStyleId);
-    RenderObject* renderer = createRenderer(m_mediaElement->renderer()->renderArena(), style);
-    if (renderer) {
-        setRenderer(renderer);
-        renderer->setStyle(style);
-    }
-    setAttached();
     setInDocument(true);
 }
 
-void MediaTextDisplayElement::attachToParent(Element* parent)
+void MediaControlElement::attachToParent(Element* parent)
 {
     parent->addChild(this);
-    if (renderer() && parent->renderer())
-        parent->renderer()->addChild(renderer());
 }
 
-void MediaTextDisplayElement::update()
+void MediaControlElement::update()
 {
     if (renderer())
         renderer()->updateFromElement();
     updateStyle();
 }
 
-void MediaTextDisplayElement::updateStyle()
+void MediaControlElement::updateStyle()
 {
-    if (renderer() && m_mediaElement->renderer()) {
-        RenderStyle* style = m_mediaElement->renderer()->getCachedPseudoStyle(m_pseudoStyleId);
+    if (!m_mediaElement || !m_mediaElement->renderer())
+        return;
+
+    RenderStyle* style = m_mediaElement->renderer()->getCachedPseudoStyle(m_pseudoStyleId);
+    if (!style)
+        return;
+
+    bool needsRenderer = rendererIsNeeded(style) && parent() && parent()->renderer();
+    if (renderer() && !needsRenderer)
+        detach();
+    else if (!renderer() && needsRenderer) {
+        RenderObject* renderer = createRenderer(m_mediaElement->renderer()->renderArena(), style);
+        if (!renderer)
+            return;
+        renderer->setStyle(style);
+        setRenderer(renderer);
+        setAttached();
+        if (parent() && parent()->renderer()) {
+            // Find next sibling with a renderer to determine where to insert.
+            Node* sibling = nextSibling();
+            while (sibling && !sibling->renderer())
+                sibling = sibling->nextSibling();
+            parent()->renderer()->addChild(renderer, sibling ? sibling->renderer() : 0);
+        }
+    } else if (renderer())
         renderer()->setStyle(style);
-    }
 }
 
-MediaTimeDisplayElement::MediaTimeDisplayElement(Document* doc, HTMLMediaElement* element, bool currentTime)
-    : MediaTextDisplayElement(doc, currentTime ? MEDIA_CONTROLS_CURRENT_TIME_DISPLAY : MEDIA_CONTROLS_TIME_REMAINING_DISPLAY, element)
+// ----------------------------
+
+MediaControlTimelineContainerElement::MediaControlTimelineContainerElement(Document* doc, HTMLMediaElement* element)
+: MediaControlElement(doc, MEDIA_CONTROLS_TIMELINE_CONTAINER, element)
+{
+}
+
+bool MediaControlTimelineContainerElement::rendererIsNeeded(RenderStyle* style)
 {
+    if (!HTMLDivElement::rendererIsNeeded(style))
+        return false;
+
+    // This is for MediaControllerThemeClassic:
+    // If there is no style for MediaControlStatusDisplayElement style, don't hide
+    // the timeline.
+    if (!m_mediaElement->renderer()->getCachedPseudoStyle(MEDIA_CONTROLS_STATUS_DISPLAY))
+        return true;
+
+    float duration = m_mediaElement->duration();
+    return !isnan(duration) && !isinf(duration);
 }
 
+    
 // ----------------------------
 
+MediaControlStatusDisplayElement::MediaControlStatusDisplayElement(Document* doc, HTMLMediaElement* element)
+: MediaControlElement(doc, MEDIA_CONTROLS_STATUS_DISPLAY, element)
+, m_stateBeingDisplayed(Nothing)
+{
+}
+
+void MediaControlStatusDisplayElement::update()
+{
+    MediaControlElement::update();
+
+    // Get the new state that we'll have to display.
+    StateBeingDisplayed newStateToDisplay = Nothing;
+    if (m_mediaElement->readyState() != HTMLMediaElement::HAVE_ENOUGH_DATA)
+        newStateToDisplay = Loading;
+    else if (m_mediaElement->isStreaming())
+        newStateToDisplay = LiveBroadcast;
+
+    // Propagate only if needed.
+    if (newStateToDisplay == m_stateBeingDisplayed)
+        return;
+    m_stateBeingDisplayed = newStateToDisplay;
+
+    ExceptionCode e;
+    switch (m_stateBeingDisplayed) {
+    case Nothing:
+        setInnerText("", e);
+        break;
+    case Loading:
+        setInnerText(mediaElementLoadingStateText(), e);
+        break;
+    case LiveBroadcast:
+        setInnerText(mediaElementLiveBroadcastStateText(), e);
+        break;
+    }
+}
+
+bool MediaControlStatusDisplayElement::rendererIsNeeded(RenderStyle* style)
+{
+    if (!HTMLDivElement::rendererIsNeeded(style))
+        return false;
+    float duration = m_mediaElement->duration();
+    return (isnan(duration) || isinf(duration));
+}
+
+// ----------------------------
+    
 MediaControlInputElement::MediaControlInputElement(Document* doc, PseudoId pseudo, const String& type, HTMLMediaElement* mediaElement, MediaControlElementType displayType) 
     : HTMLInputElement(inputTag, doc)
     , m_mediaElement(mediaElement)
@@ -126,15 +207,12 @@ MediaControlInputElement::MediaControlInputElement(Document* doc, PseudoId pseud
     , m_displayType(displayType)
 {
     setInputType(type);
-    updateStyle();
     setInDocument(true);
 }
 
 void MediaControlInputElement::attachToParent(Element* parent)
 {
     parent->addChild(this);
-    if (renderer() && parent->renderer())
-        parent->renderer()->addChild(renderer());
 }
 
 void MediaControlInputElement::update()
@@ -149,10 +227,12 @@ void MediaControlInputElement::updateStyle()
 {
     if (!m_mediaElement || !m_mediaElement->renderer())
         return;
-    
+
     RenderStyle* style = m_mediaElement->renderer()->getCachedPseudoStyle(m_pseudoStyleId);
-    
-    bool needsRenderer = rendererIsNeeded(style);
+    if (!style)
+        return;
+
+    bool needsRenderer = rendererIsNeeded(style) && parent() && parent()->renderer();
     if (renderer() && !needsRenderer)
         detach();
     else if (!renderer() && needsRenderer) {
@@ -285,6 +365,43 @@ void MediaControlSeekButtonElement::seekTimerFired(Timer<MediaControlSeekButtonE
 
 // ----------------------------
 
+MediaControlRewindButtonElement::MediaControlRewindButtonElement(Document* doc, HTMLMediaElement* element)
+: MediaControlInputElement(doc, MEDIA_CONTROLS_REWIND_BUTTON, "button", element, MediaRewindButton)
+{
+}
+
+void MediaControlRewindButtonElement::defaultEventHandler(Event* event)
+{
+    if (event->type() == eventNames().clickEvent) {
+        m_mediaElement->rewind(30);
+        event->setDefaultHandled();
+    }    
+    HTMLInputElement::defaultEventHandler(event);
+}
+
+// ----------------------------
+
+MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement(Document* doc, HTMLMediaElement* element)
+: MediaControlInputElement(doc, MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON, "button", element, MediaReturnToRealtimeButton)
+{
+}
+
+void MediaControlReturnToRealtimeButtonElement::defaultEventHandler(Event* event)
+{
+    if (event->type() == eventNames().clickEvent) {
+        m_mediaElement->returnToRealtime();
+        event->setDefaultHandled();
+    }
+    HTMLInputElement::defaultEventHandler(event);
+}
+
+bool MediaControlReturnToRealtimeButtonElement::rendererIsNeeded(RenderStyle* style)
+{
+    return HTMLInputElement::rendererIsNeeded(style) && m_mediaElement->isStreaming();
+}
+
+// ----------------------------
+
 MediaControlTimelineElement::MediaControlTimelineElement(Document* document, HTMLMediaElement* element)
     : MediaControlInputElement(document, MEDIA_CONTROLS_TIMELINE, "range", element, MediaTimelineContainer)
 { 
@@ -295,7 +412,7 @@ void MediaControlTimelineElement::defaultEventHandler(Event* event)
     if (event->type() == eventNames().mousedownEvent)
         m_mediaElement->beginScrubbing();
 
-    HTMLInputElement::defaultEventHandler(event);
+    MediaControlInputElement::defaultEventHandler(event);
 
      if (event->type() == eventNames().mouseoverEvent || event->type() == eventNames().mouseoutEvent || event->type() == eventNames().mousemoveEvent ) {
         return;
@@ -322,6 +439,7 @@ void MediaControlTimelineElement::update(bool updateDuration)
         setAttribute(maxAttr, String::number(isfinite(dur) ? dur : 0));
     }
     setValue(String::number(m_mediaElement->currentTime()));
+    MediaControlInputElement::update();
 }
 
 // ----------------------------
@@ -341,7 +459,7 @@ void MediaControlFullscreenButtonElement::defaultEventHandler(Event* event)
 
 bool MediaControlFullscreenButtonElement::rendererIsNeeded(RenderStyle* style)
 {
-    return m_mediaElement->supportsFullscreen() && MediaControlInputElement::rendererIsNeeded(style);
+    return MediaControlInputElement::rendererIsNeeded(style) && m_mediaElement->supportsFullscreen();
 }
 
 
index eefb2ce1b6f3a966fd551220e744cc7c482b660c..df78583a90a7e09bb468e5487e595f63c50016cd 100644 (file)
@@ -43,11 +43,24 @@ namespace WebCore {
 class Event;
 class Frame;
 
+// Must match WebKitSystemInterface.h
 enum MediaControlElementType {
-    MediaFullscreenButton, MediaMuteButton, MediaPlayButton,
-    MediaSeekBackButton, MediaSeekForwardButton, MediaSlider, MediaSliderThumb,
-    MediaUnMuteButton, MediaPauseButton, MediaTimelineContainer, MediaCurrentTimeDisplay, 
-    MediaTimeRemainingDisplay, MediaControlsPanel
+    MediaFullscreenButton = 0,
+    MediaMuteButton,
+    MediaPlayButton,
+    MediaSeekBackButton,
+    MediaSeekForwardButton,
+    MediaSlider,
+    MediaSliderThumb,
+    MediaRewindButton,
+    MediaReturnToRealtimeButton,
+    MediaUnMuteButton,
+    MediaPauseButton,
+    MediaTimelineContainer,
+    MediaCurrentTimeDisplay, 
+    MediaTimeRemainingDisplay,
+    MediaStatusDisplay,
+    MediaControlsPanel
 };
 
 class MediaControlShadowRootElement : public HTMLDivElement {
@@ -63,12 +76,12 @@ private:
     HTMLMediaElement* m_mediaElement;    
 };
 
- // ----------------------------
-class MediaTextDisplayElement : public HTMLDivElement
+// ----------------------------
+
+class MediaControlElement : public HTMLDivElement
 {
 public:
-    MediaTextDisplayElement(Document*, PseudoId, HTMLMediaElement*);
+    MediaControlElement(Document*, PseudoId, HTMLMediaElement*);
     void attachToParent(Element*);
     void update();
     void updateStyle();
@@ -79,9 +92,22 @@ protected:
 
 // ----------------------------
 
-class MediaTimeDisplayElement : public MediaTextDisplayElement {
+class MediaControlTimelineContainerElement : public MediaControlElement {
 public:
-    MediaTimeDisplayElement(Document*, HTMLMediaElement*, bool currentTime);
+    MediaControlTimelineContainerElement(Document*, HTMLMediaElement*);
+    virtual bool rendererIsNeeded(RenderStyle* style);
+};
+
+// ----------------------------
+
+class MediaControlStatusDisplayElement : public MediaControlElement {
+public:
+    MediaControlStatusDisplayElement(Document*, HTMLMediaElement*);
+    virtual void update();
+    virtual bool rendererIsNeeded(RenderStyle* style);
+private:
+    enum StateBeingDisplayed { Nothing, Loading, LiveBroadcast };
+    StateBeingDisplayed m_stateBeingDisplayed;
 };
 
 // ----------------------------
@@ -136,6 +162,23 @@ private:
     bool m_capturing;
     Timer<MediaControlSeekButtonElement> m_seekTimer;
 };
+    
+// ----------------------------
+
+class MediaControlRewindButtonElement : public MediaControlInputElement {
+public:
+    MediaControlRewindButtonElement(Document*, HTMLMediaElement*);
+    virtual void defaultEventHandler(Event*);
+};
+
+// ----------------------------
+
+class MediaControlReturnToRealtimeButtonElement : public MediaControlInputElement {
+public:
+    MediaControlReturnToRealtimeButtonElement(Document*, HTMLMediaElement*);
+    virtual void defaultEventHandler(Event*);
+    virtual bool rendererIsNeeded(RenderStyle*);
+};    
 
 // ----------------------------
 
@@ -162,7 +205,7 @@ public:
     RenderMediaControlShadowRoot(Element* e) : RenderBlock(e) { }
     void setParent(RenderObject* p) { RenderObject::setParent(p); }
 };
-
+    
 // ----------------------------
 
 } //namespace WebCore
index b0eb0973071cb4d19ec211e00ecf5c50ef2c3141..82e0876c3fd7e5f1628a11f9b39198444e8def68 100644 (file)
@@ -104,16 +104,15 @@ void RenderMedia::styleDidChange(StyleDifference diff, const RenderStyle* oldSty
     RenderReplaced::styleDidChange(diff, oldStyle);
 
     if (m_controlsShadowRoot) {
-        if (m_panel->renderer())
-            m_panel->renderer()->setStyle(getCachedPseudoStyle(MEDIA_CONTROLS_PANEL));
-
-        if (m_timelineContainer->renderer())
-            m_timelineContainer->renderer()->setStyle(getCachedPseudoStyle(MEDIA_CONTROLS_TIMELINE_CONTAINER));
-        
+        m_panel->updateStyle();
         m_muteButton->updateStyle();
         m_playButton->updateStyle();
         m_seekBackButton->updateStyle();
         m_seekForwardButton->updateStyle();
+        m_rewindButton->updateStyle();
+        m_returnToRealtimeButton->updateStyle();
+        m_statusDisplay->updateStyle();
+        m_timelineContainer->updateStyle();
         m_timeline->updateStyle();
         m_fullscreenButton->updateStyle();
         m_currentTimeDisplay->updateStyle();
@@ -151,17 +150,8 @@ void RenderMedia::createControlsShadowRoot()
 void RenderMedia::createPanel()
 {
     ASSERT(!m_panel);
-    RenderStyle* style = getCachedPseudoStyle(MEDIA_CONTROLS_PANEL);
-    m_panel = new HTMLDivElement(HTMLNames::divTag, document());
-    RenderObject* renderer = m_panel->createRenderer(renderArena(), style);
-    if (renderer) {
-        m_panel->setRenderer(renderer);
-        renderer->setStyle(style);
-        m_panel->setAttached();
-        m_panel->setInDocument(true);
-        m_controlsShadowRoot->addChild(m_panel);
-        m_controlsShadowRoot->renderer()->addChild(renderer);
-    }
+    m_panel = new MediaControlElement(document(), MEDIA_CONTROLS_PANEL, mediaElement());
+    m_panel->attachToParent(m_controlsShadowRoot.get());
 }
 
 void RenderMedia::createMuteButton()
@@ -192,20 +182,32 @@ void RenderMedia::createSeekForwardButton()
     m_seekForwardButton->attachToParent(m_panel.get());
 }
 
+void RenderMedia::createRewindButton()
+{
+    ASSERT(!m_rewindButton);
+    m_rewindButton = new MediaControlRewindButtonElement(document(), mediaElement());
+    m_rewindButton->attachToParent(m_panel.get());
+}
+
+void RenderMedia::createReturnToRealtimeButton()
+{
+    ASSERT(!m_returnToRealtimeButton);
+    m_returnToRealtimeButton = new MediaControlReturnToRealtimeButtonElement(document(), mediaElement());
+    m_returnToRealtimeButton->attachToParent(m_panel.get());
+}
+
+void RenderMedia::createStatusDisplay()
+{
+    ASSERT(!m_statusDisplay);
+    m_statusDisplay = new MediaControlStatusDisplayElement(document(), mediaElement());
+    m_statusDisplay->attachToParent(m_panel.get());
+}
+
 void RenderMedia::createTimelineContainer()
 {
     ASSERT(!m_timelineContainer);
-    RenderStyle* style = getCachedPseudoStyle(MEDIA_CONTROLS_TIMELINE_CONTAINER);
-    m_timelineContainer = new HTMLDivElement(HTMLNames::divTag, document());
-    RenderObject* renderer = m_timelineContainer->createRenderer(renderArena(), style);
-    if (renderer) {
-        m_timelineContainer->setRenderer(renderer);
-        renderer->setStyle(style);
-        m_timelineContainer->setAttached();
-        m_timelineContainer->setInDocument(true);
-        m_panel->addChild(m_timelineContainer);
-        m_panel->renderer()->addChild(renderer);
-    }
+    m_timelineContainer = new MediaControlTimelineContainerElement(document(), mediaElement());
+    m_timelineContainer->attachToParent(m_panel.get());
 }
 
 void RenderMedia::createTimeline()
@@ -215,18 +217,18 @@ void RenderMedia::createTimeline()
     m_timeline->setAttribute(precisionAttr, "float");
     m_timeline->attachToParent(m_timelineContainer.get());
 }
-  
+
 void RenderMedia::createCurrentTimeDisplay()
 {
     ASSERT(!m_currentTimeDisplay);
-    m_currentTimeDisplay = new MediaTimeDisplayElement(document(), mediaElement(), true);
+    m_currentTimeDisplay = new MediaControlElement(document(), MEDIA_CONTROLS_CURRENT_TIME_DISPLAY, mediaElement());
     m_currentTimeDisplay->attachToParent(m_timelineContainer.get());
 }
 
 void RenderMedia::createTimeRemainingDisplay()
 {
     ASSERT(!m_timeRemainingDisplay);
-    m_timeRemainingDisplay = new MediaTimeDisplayElement(document(), mediaElement(), false);
+    m_timeRemainingDisplay = new MediaControlElement(document(), MEDIA_CONTROLS_TIME_REMAINING_DISPLAY, mediaElement());
     m_timeRemainingDisplay->attachToParent(m_timelineContainer.get());
 }
 
@@ -251,10 +253,13 @@ void RenderMedia::updateControls()
             m_panel = 0;
             m_muteButton = 0;
             m_playButton = 0;
+            m_statusDisplay = 0;
             m_timelineContainer = 0;
             m_timeline = 0;
             m_seekBackButton = 0;
             m_seekForwardButton = 0;
+            m_rewindButton = 0;
+            m_returnToRealtimeButton = 0;
             m_currentTimeDisplay = 0;
             m_timeRemainingDisplay = 0;
             m_fullscreenButton = 0;
@@ -269,15 +274,18 @@ void RenderMedia::updateControls()
     if (!m_controlsShadowRoot) {
         createControlsShadowRoot();
         createPanel();
-        if (m_panel && m_panel->renderer()) {
+        if (m_panel) {
+            createRewindButton();
             createMuteButton();
             createPlayButton();
+            createReturnToRealtimeButton();
+            createStatusDisplay();
             createTimelineContainer();
             createSeekBackButton();
             createSeekForwardButton();
-            createFullscreenButton();            
+            createFullscreenButton();
         }
-        if (m_timelineContainer && m_timelineContainer->renderer()) {
+        if (m_timelineContainer) {
             createCurrentTimeDisplay();
             createTimeline();
             createTimeRemainingDisplay();
@@ -293,10 +301,14 @@ void RenderMedia::updateControls()
 
     m_previousVisible = style()->visibility();
     
+    if (m_panel)
+        m_panel->update();
     if (m_muteButton)
         m_muteButton->update();
     if (m_playButton)
         m_playButton->update();
+    if (m_timelineContainer)
+        m_timelineContainer->update();
     if (m_timeline)
         m_timeline->update();
     if (m_currentTimeDisplay)
@@ -307,6 +319,12 @@ void RenderMedia::updateControls()
         m_seekBackButton->update();
     if (m_seekForwardButton)
         m_seekForwardButton->update();
+    if (m_rewindButton)
+        m_rewindButton->update();
+    if (m_returnToRealtimeButton)
+        m_returnToRealtimeButton->update();
+    if (m_statusDisplay)
+        m_statusDisplay->update();
     if (m_fullscreenButton)
         m_fullscreenButton->update();
     updateTimeDisplay();
@@ -426,6 +444,12 @@ void RenderMedia::forwardEvent(Event* event)
         if (m_seekForwardButton && m_seekForwardButton->hitTest(point))
             m_seekForwardButton->defaultEventHandler(event);
 
+        if (m_rewindButton && m_rewindButton->hitTest(point))
+            m_rewindButton->defaultEventHandler(event);
+
+        if (m_returnToRealtimeButton && m_returnToRealtimeButton->hitTest(point))
+            m_returnToRealtimeButton->defaultEventHandler(event);
+
         if (m_timeline && m_timeline->hitTest(point))
             m_timeline->defaultEventHandler(event);
 
index 6013d7b77175c5c52eb94e65f0f9550d181b89ee..be9b38a2ad82e4964a9b5165b2cef56965c48602 100644 (file)
@@ -38,9 +38,14 @@ class HTMLMediaElement;
 class MediaControlMuteButtonElement;
 class MediaControlPlayButtonElement;
 class MediaControlSeekButtonElement;
+class MediaControlRewindButtonElement;
+class MediaControlReturnToRealtimeButtonElement;
 class MediaControlTimelineElement;
 class MediaControlFullscreenButtonElement;
-class MediaTimeDisplayElement;
+class MediaControlTimeDisplayElement;
+class MediaControlStatusDisplayElement;
+class MediaControlTimelineContainerElement;
+class MediaControlElement;
 class MediaPlayer;
 
 class RenderMedia : public RenderReplaced {
@@ -85,6 +90,9 @@ private:
     void createPlayButton();
     void createSeekBackButton();
     void createSeekForwardButton();
+    void createRewindButton();
+    void createReturnToRealtimeButton();
+    void createStatusDisplay();
     void createTimelineContainer();
     void createTimeline();
     void createCurrentTimeDisplay();
@@ -100,16 +108,19 @@ private:
     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
 
     RefPtr<HTMLElement> m_controlsShadowRoot;
-    RefPtr<HTMLElement> m_panel;
+    RefPtr<MediaControlElement> m_panel;
     RefPtr<MediaControlMuteButtonElement> m_muteButton;
     RefPtr<MediaControlPlayButtonElement> m_playButton;
     RefPtr<MediaControlSeekButtonElement> m_seekBackButton;
     RefPtr<MediaControlSeekButtonElement> m_seekForwardButton;
+    RefPtr<MediaControlRewindButtonElement> m_rewindButton;
+    RefPtr<MediaControlReturnToRealtimeButtonElement> m_returnToRealtimeButton;
     RefPtr<MediaControlTimelineElement> m_timeline;
     RefPtr<MediaControlFullscreenButtonElement> m_fullscreenButton;
-    RefPtr<HTMLElement> m_timelineContainer;
-    RefPtr<MediaTimeDisplayElement> m_currentTimeDisplay;
-    RefPtr<MediaTimeDisplayElement> m_timeRemainingDisplay;
+    RefPtr<MediaControlTimelineContainerElement> m_timelineContainer;
+    RefPtr<MediaControlElement> m_currentTimeDisplay;
+    RefPtr<MediaControlElement> m_timeRemainingDisplay;
+    RefPtr<MediaControlStatusDisplayElement> m_statusDisplay;
     RenderObjectChildList m_children;
     Node* m_lastUnderNode;
     Node* m_nodeUnderMouse;
index 517d911ae0639ef97e8d4aa3d0f0f5e263c1996a..07e06ada75a90636163cb653dfce0af166603cf4 100644 (file)
@@ -262,6 +262,10 @@ bool RenderTheme::paint(RenderObject* o, const RenderObject::PaintInfo& paintInf
             return paintMediaSeekBackButton(o, paintInfo, r);
         case MediaSeekForwardButtonPart:
             return paintMediaSeekForwardButton(o, paintInfo, r);
+        case MediaRewindButtonPart:
+            return paintMediaRewindButton(o, paintInfo, r);
+        case MediaReturnToRealtimeButtonPart:
+            return paintMediaReturnToRealtimeButton(o, paintInfo, r);
         case MediaSliderPart:
             return paintMediaSliderTrack(o, paintInfo, r);
         case MediaSliderThumbPart:
@@ -272,8 +276,8 @@ bool RenderTheme::paint(RenderObject* o, const RenderObject::PaintInfo& paintInf
             return paintMediaTimeRemaining(o, paintInfo, r);
         case MediaCurrentTimePart:
             return paintMediaCurrentTime(o, paintInfo, r);
-        case MediaTimelineContainerPart:
-            return paintMediaTimelineContainer(o, paintInfo, r);
+        case MediaControlsBackgroundPart:
+            return paintMediaControlsBackground(o, paintInfo, r);
         case MenulistButtonPart:
         case TextFieldPart:
         case TextAreaPart:
index eb6d4412e962a758701dc436cb1487f58b2edafe..e723f7d91f061e35de3f04015065ea3e44e7e64f 100644 (file)
@@ -242,7 +242,9 @@ protected:
     virtual bool paintMediaSeekForwardButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
     virtual bool paintMediaSliderTrack(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
     virtual bool paintMediaSliderThumb(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
-    virtual bool paintMediaTimelineContainer(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
+    virtual bool paintMediaRewindButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
+    virtual bool paintMediaReturnToRealtimeButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
+    virtual bool paintMediaControlsBackground(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
     virtual bool paintMediaCurrentTime(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
     virtual bool paintMediaTimeRemaining(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return true; }
 
index ba32105518298af6d8c6c529ec60f141b027cc21..95749a88256464b7b4b510ef47c8e9291b56dcba 100644 (file)
@@ -124,7 +124,9 @@ protected:
     virtual bool paintMediaSeekForwardButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
     virtual bool paintMediaSliderTrack(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
     virtual bool paintMediaSliderThumb(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
-    virtual bool paintMediaTimelineContainer(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
+    virtual bool paintMediaRewindButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
+    virtual bool paintMediaReturnToRealtimeButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
+    virtual bool paintMediaControlsBackground(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
     virtual bool paintMediaCurrentTime(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
     virtual bool paintMediaTimeRemaining(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
 
index 251df75aceeb0b73c939271334f70a0cf903fcf2..2300d8fb9858dd886d7978b9af33a0ad940c6fda 100644 (file)
@@ -1572,8 +1572,31 @@ bool RenderThemeMac::paintMediaSliderThumb(RenderObject* o, const RenderObject::
     wkDrawMediaUIPart(MediaSliderThumb, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active());
     return false;
 }
+    
+bool RenderThemeMac::paintMediaRewindButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
+{
+    Node* node = o->node();
+    if (!node)
+        return false;
+    
+    LocalCurrentGraphicsContext localContext(paintInfo.context);
+    wkDrawMediaUIPart(MediaRewindButton, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active());
+    return false;
+}
+
+bool RenderThemeMac::paintMediaReturnToRealtimeButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
+{
+    Node* node = o->node();
+    if (!node)
+        return false;
+    
+    LocalCurrentGraphicsContext localContext(paintInfo.context);
+    wkDrawMediaUIPart(MediaReturnToRealtimeButton, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active());
+    return false;
+}
+
 
-bool RenderThemeMac::paintMediaTimelineContainer(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
+bool RenderThemeMac::paintMediaControlsBackground(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
 {
     Node* node = o->node();
     if (!node)
index 405cf7c80d4de8f0620a4355459bed12e1a67d77..82cb208ff3bef1c617497d365a8f383dcdf65749 100644 (file)
@@ -69,7 +69,8 @@ enum PseudoId {
     SLIDER_THUMB, SEARCH_CANCEL_BUTTON, SEARCH_DECORATION, SEARCH_RESULTS_DECORATION, SEARCH_RESULTS_BUTTON, MEDIA_CONTROLS_PANEL,
     MEDIA_CONTROLS_PLAY_BUTTON, MEDIA_CONTROLS_MUTE_BUTTON, MEDIA_CONTROLS_TIMELINE, MEDIA_CONTROLS_TIMELINE_CONTAINER,
     MEDIA_CONTROLS_CURRENT_TIME_DISPLAY, MEDIA_CONTROLS_TIME_REMAINING_DISPLAY, MEDIA_CONTROLS_SEEK_BACK_BUTTON, 
-    MEDIA_CONTROLS_SEEK_FORWARD_BUTTON, MEDIA_CONTROLS_FULLSCREEN_BUTTON, 
+    MEDIA_CONTROLS_SEEK_FORWARD_BUTTON, MEDIA_CONTROLS_FULLSCREEN_BUTTON, MEDIA_CONTROLS_REWIND_BUTTON,
+    MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON, MEDIA_CONTROLS_STATUS_DISPLAY,
     SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER,
 
     FIRST_INTERNAL_PSEUDOID = FILE_UPLOAD_BUTTON
index f07a75cd3bd2356a6b14abe7ab89f2c59042fbfe..af4d4e6b50e439eb99e4cb7ed03f3576e866b298 100644 (file)
@@ -1,3 +1,13 @@
+2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>
+
+        Reviewed by Simon Fraser.
+
+        <rdar://problem/6518119>
+
+        Add localized strings for media controller status messages.
+
+        * English.lproj/Localizable.strings: Localized text.
+
 2009-06-08  Dan Bernstein  <mitz@apple.com>
 
         Rubber-stamped by Mark Rowe.
index d2a854c4845219801cd126918b02a8b162fd7030..7bb4617c5da81ce320b7baed9d6640dd116ba60f 100644 (file)
Binary files a/WebKit/English.lproj/Localizable.strings and b/WebKit/English.lproj/Localizable.strings differ
index 53fcad8e4d33005e622ac1590964a4e064ca22b5..b51d75b530dafe512b170e6f61b7c14b721dde9b 100644 (file)
@@ -1,3 +1,15 @@
+2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>
+
+        Reviewed by Simon Fraser.
+
+        <rdar://problem/6518119>
+
+        Add localized strings for media controller status messages.
+
+        * WebCoreSupport/WebViewFactory.mm: Add new localized text.
+        (-[WebViewFactory mediaElementLoadingStateText]):
+        (-[WebViewFactory mediaElementLiveBroadcastStateText]):
+
 2009-07-01  Brady Eidson  <beidson@apple.com>
 
         Reviewed by Sam Weinig.
index bbc098742a7d2991a7190fbacb5de70aef1eb1fd..502db6cc64ad4fe4ddd68072d6322699963eae13 100644 (file)
     return [NSString stringWithFormat:UI_STRING("%@ %d×%d pixels", "window title for a standalone image (uses multiplication symbol, not x)"), filename, width, height];
 }
 
+- (NSString*)mediaElementLoadingStateText
+{
+    return UI_STRING("Loading...", "text that shows up in the media controller when the media is loading");
+}
+
+- (NSString*)mediaElementLiveBroadcastStateText
+{
+    return UI_STRING("Live Broadcast", "text that shows up in the media controller when watching a live broadcast");
+}
+
 @end
index 7aeaa5f8bcc015666bd521a2ce67886791ba6d7e..5ab2ca4382aa4a29dc77c1c185142f70a96b99a2 100644 (file)
@@ -1,3 +1,14 @@
+2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>
+
+        Reviewed by Simon Fraser.
+
+        Update WebKitSystemInterface for <rdar://problem/6518119>
+
+        * WebKitSystemInterface.h:
+        * libWebKitSystemInterfaceLeopard.a:
+        * libWebKitSystemInterfaceSnowLeopard.a:
+        * libWebKitSystemInterfaceTiger.a:
+
 2009-07-01  Eric Carlson  <eric.carlson@apple.com>
 
         Reviewed by Simon Fraser.
index 26978daeb4ff868f8c0745806cc79ca05519caa4..eb43c3f0cfb87dd7b86aa286cab54baed0567f3c 100644 (file)
@@ -199,17 +199,19 @@ CFStringRef WKCopyFoundationCacheDirectory(void);
 
 typedef enum {
     WKMediaUIPartFullscreenButton   = 0,
-    WKMediaUIPartMuteButton         = 1,
-    WKMediaUIPartPlayButton         = 2,
-    WKMediaUIPartSeekBackButton     = 3,
-    WKMediaUIPartSeekForwardButton  = 4,
-    WKMediaUIPartSlider             = 5,
-    WKMediaUIPartSliderThumb        = 6,
-    WKMediaUIPartUnMuteButton       = 7,
-    WKMediaUIPartPauseButton        = 8,
-    WKMediaUIPartTimelineContainer  = 9,
-    WKMediaUIPartCurrentTimeDisplay = 10,
-    WKMediaUIPartTimeRemainingDisplay= 11
+    WKMediaUIPartMuteButton,
+    WKMediaUIPartPlayButton,
+    WKMediaUIPartSeekBackButton,
+    WKMediaUIPartSeekForwardButton,
+    WKMediaUIPartSlider,
+    WKMediaUIPartSliderThumb,
+    WKMediaUIPartRewindButton,
+    WKMediaUIPartSeekToRealtimeButton,
+    WKMediaUIPartUnMuteButton,
+    WKMediaUIPartPauseButton,
+    WKMediaUIPartBackground,
+    WKMediaUIPartCurrentTimeDisplay,
+    WKMediaUIPartTimeRemainingDisplay
 } WKMediaUIPart;
 
 typedef enum {
@@ -217,9 +219,15 @@ typedef enum {
     WKMediaControllerThemeQT        = 2
 } WKMediaControllerThemeStyle;
 
+typedef enum {
+    WKMediaControllerStateNormal     = 0,
+    WKMediaControllerStateActivated  = 1,
+    WKMediaControllerStateDisabled   = 2
+} WKMediaControllerThemeState;
+
 BOOL WKHitTestMediaUIPart(int part, int themeStyle, CGRect bounds, CGPoint point);
 void WKMeasureMediaUIPart(int part, int themeStyle, CGRect *bounds, CGSize *naturalSize);
-void WKDrawMediaUIPart(int part, int themeStyle, CGContextRef context, CGRect rect, BOOL active);
+void WKDrawMediaUIPart(int part, int themeStyle, CGContextRef context, CGRect rect, int state);
 void WKDrawMediaSliderTrack(int themeStyle, CGContextRef context, CGRect rect, float timeLoaded, float currentTime, float duration);
 
 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && defined(__x86_64__)
index e798c62fe93be4a8224adbf877a64088a4cc9aec..2e6c8c9df04f205fbfd4bc3bae439dfa75b122c1 100644 (file)
Binary files a/WebKitLibraries/libWebKitSystemInterfaceLeopard.a and b/WebKitLibraries/libWebKitSystemInterfaceLeopard.a differ
index 0722244df7a100261b6f326bf1d70a49d0404e89..9dacabc77a705cb2b4e61a78beadc3acc428c0db 100644 (file)
Binary files a/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a and b/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a differ
index 46d63e89a5cab1621b981b6f74c54e2e71f45d40..19ada894c49fce5214fdf688a9dfc7ff4e2d7027 100644 (file)
Binary files a/WebKitLibraries/libWebKitSystemInterfaceTiger.a and b/WebKitLibraries/libWebKitSystemInterfaceTiger.a differ