bug 1116382 resolve MediaSource urls on Source element src attributes when set r=bholley

--HG--
extra : rebase_source : 2b3a338cbe444461267af04d2907bbc3a042cc0b
This commit is contained in:
Karl Tomlinson 2015-05-26 23:01:14 +12:00
Родитель 75c800d128
Коммит c4f7974c43
2 изменённых файлов: 28 добавлений и 2 удалений

Просмотреть файл

@ -9,11 +9,13 @@
#include "mozilla/dom/HTMLImageElement.h"
#include "mozilla/dom/ResponsiveImageSelector.h"
#include "mozilla/dom/MediaSource.h"
#include "nsGkAtoms.h"
#include "nsIMediaList.h"
#include "nsCSSParser.h"
#include "nsHostObjectProtocolHandler.h"
#include "mozilla/Preferences.h"
@ -31,8 +33,15 @@ HTMLSourceElement::~HTMLSourceElement()
{
}
NS_IMPL_ISUPPORTS_INHERITED(HTMLSourceElement, nsGenericHTMLElement,
nsIDOMHTMLSourceElement)
NS_IMPL_CYCLE_COLLECTION_INHERITED(HTMLSourceElement, nsGenericHTMLElement,
mSrcMediaSource)
NS_IMPL_ADDREF_INHERITED(HTMLSourceElement, nsGenericHTMLElement)
NS_IMPL_RELEASE_INHERITED(HTMLSourceElement, nsGenericHTMLElement)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(HTMLSourceElement)
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLSourceElement)
NS_INTERFACE_MAP_END_INHERITING(nsGenericHTMLElement)
NS_IMPL_ELEMENT_CLONE(HTMLSourceElement)
@ -114,6 +123,16 @@ HTMLSourceElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
cssParser.ParseMediaList(mediaStr, nullptr, 0, mMediaList, false);
}
}
} else if (aNameSpaceID == kNameSpaceID_None && aName == nsGkAtoms::src) {
mSrcMediaSource = nullptr;
if (aValue) {
nsString srcStr = aValue->GetStringValue();
nsCOMPtr<nsIURI> uri;
NewURIFromString(srcStr, getter_AddRefs(uri));
if (uri && IsMediaSourceURI(uri)) {
NS_GetSourceForMediaSourceURI(uri, getter_AddRefs(mSrcMediaSource));
}
}
}
return nsGenericHTMLElement::AfterSetAttr(aNameSpaceID, aName,

Просмотреть файл

@ -25,6 +25,8 @@ public:
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLSourceElement,
nsGenericHTMLElement)
NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLSourceElement, source)
@ -49,6 +51,10 @@ public:
static bool WouldMatchMediaForDocument(const nsAString& aMediaStr,
const nsIDocument *aDocument);
// Return the MediaSource object if any associated with the src attribute
// when it was set.
MediaSource* GetSrcMediaSource() { return mSrcMediaSource; };
// WebIDL
void GetSrc(nsString& aSrc)
{
@ -111,6 +117,7 @@ protected:
private:
nsRefPtr<nsMediaList> mMediaList;
nsRefPtr<MediaSource> mSrcMediaSource;
};
} // namespace dom