void MediaPlayerPrivateEA::load(const String& url) { if (!mpEAWebKitView) mpEAWebKitView = GetEAWebKitMediaView(mpWebCorePlayer); // Note: We get the autoplay and loop flags from the element directly. HTMLMediaElement* element = static_cast<HTMLMediaElement*>(mpWebCorePlayer->mediaPlayerClient()); mIsLooping = element->loop(); MediaUpdateInfo& info = GetMediaUpdateInfo(); info.mIsLooping = mIsLooping; WebCore::KURL kurl(WebCore::KURL(), url); String escapedUrl = kurl.protocolIsInHTTPFamily() ? url : decodeURLEscapeSequences(url); GetFixedString(info.mURI)->assign(escapedUrl.characters(), escapedUrl.length()); ClientUpdate(MediaUpdateInfo::kLoad); // Set info up to play setMuted(mpWebCorePlayer->muted()); setVolume(mpWebCorePlayer->volume()); if(mNetworkState != MediaPlayer::Loading) { mNetworkState = MediaPlayer::Loading; mpWebCorePlayer->networkStateChanged(); } if(mReadyState != MediaPlayer::HaveNothing) { mReadyState = MediaPlayer::HaveNothing; mpWebCorePlayer->readyStateChanged(); } bool autoPlay = element->autoplay(); if(autoPlay) mpWebCorePlayer->play(); // This just calls our play. ClientUpdateStates(); // This will update the pause/play state right away. // Set up an update timer to control the repaint and playback. if (mUpdateTimer.isActive()) mUpdateTimer.stop(); const double kUpdateTime = 1.0/60.0; // We want to update at 60hz so we keep up with the render calls. mUpdateTimer.startRepeating(kUpdateTime); }
JSValue* JSHTMLMediaElement::getValueProperty(ExecState* exec, int token) const { switch (token) { case ErrorAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return toJS(exec, WTF::getPtr(imp->error())); } case SrcAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsString(exec, imp->src()); } case CurrentSrcAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsString(exec, imp->currentSrc()); } case NetworkStateAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->networkState()); } case BufferingRateAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->bufferingRate()); } case BufferedAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return toJS(exec, WTF::getPtr(imp->buffered())); } case ReadyStateAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->readyState()); } case SeekingAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsBoolean(imp->seeking()); } case CurrentTimeAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->currentTime()); } case DurationAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->duration()); } case PausedAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsBoolean(imp->paused()); } case DefaultPlaybackRateAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->defaultPlaybackRate()); } case PlaybackRateAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->playbackRate()); } case PlayedAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return toJS(exec, WTF::getPtr(imp->played())); } case SeekableAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return toJS(exec, WTF::getPtr(imp->seekable())); } case EndedAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsBoolean(imp->ended()); } case AutoplayAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsBoolean(imp->autoplay()); } case StartAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->start()); } case EndAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->end()); } case LoopStartAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->loopStart()); } case LoopEndAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->loopEnd()); } case PlayCountAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->playCount()); } case CurrentLoopAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->currentLoop()); } case ControlsAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsBoolean(imp->controls()); } case VolumeAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsNumber(exec, imp->volume()); } case MutedAttrNum: { HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(impl()); return jsBoolean(imp->muted()); } case ConstructorAttrNum: return getConstructor(exec); } return 0; }