merge mozilla-inbound to mozilla-central a=merge

--HG--
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/css/ot.min.css => browser/components/loop/content/libs/sdk-content/css/ot.css
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-denied-chrome.png => browser/components/loop/content/libs/sdk-content/images/rtc/access-denied-chrome.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-denied-copy-firefox.png => browser/components/loop/content/libs/sdk-content/images/rtc/access-denied-copy-firefox.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-denied-firefox.png => browser/components/loop/content/libs/sdk-content/images/rtc/access-denied-firefox.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-predenied-chrome.png => browser/components/loop/content/libs/sdk-content/images/rtc/access-predenied-chrome.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-prompt-chrome.png => browser/components/loop/content/libs/sdk-content/images/rtc/access-prompt-chrome.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/audioonly-publisher.png => browser/components/loop/content/libs/sdk-content/images/rtc/audioonly-publisher.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/audioonly-subscriber.png => browser/components/loop/content/libs/sdk-content/images/rtc/audioonly-subscriber.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/buttons.png => browser/components/loop/content/libs/sdk-content/images/rtc/buttons.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/loader.gif => browser/components/loop/content/libs/sdk-content/images/rtc/loader.gif
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/mic-off.png => browser/components/loop/content/libs/sdk-content/images/rtc/mic-off.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/mic-on.png => browser/components/loop/content/libs/sdk-content/images/rtc/mic-on.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/speaker-off.png => browser/components/loop/content/libs/sdk-content/images/rtc/speaker-off.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/images/rtc/speaker-on.png => browser/components/loop/content/libs/sdk-content/images/rtc/speaker-on.png
rename : browser/components/loop/content/libs/otcdn/webrtc/v2.2.5/js/dynamic_config.min.js => browser/components/loop/content/libs/sdk-content/js/dynamic_config.min.js
This commit is contained in:
Carsten "Tomcat" Book 2014-07-09 15:54:37 +02:00
Родитель 4b9a10d0f9 a0610ba42d
Коммит 664b47edad
466 изменённых файлов: 5125 добавлений и 1214 удалений

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

@ -51,8 +51,10 @@ public:
typedef mozilla::a11y::Accessible Accessible;
typedef mozilla::a11y::DocAccessible DocAccessible;
protected:
virtual ~nsAccessibilityService();
public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIACCESSIBLERETRIEVAL
NS_DECL_NSIOBSERVER

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

@ -59,6 +59,7 @@ public:
virtual Accessible* AsAccessible() { return this; }
protected:
virtual ~ARIAGridAccessible() {}
/**
* Return true if the given row index is valid.
@ -117,6 +118,7 @@ public:
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
protected:
virtual ~ARIAGridCellAccessible() {}
/**
* Return a containing row.

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

@ -81,6 +81,7 @@ public:
virtual KeyBinding AccessKey() const;
protected:
virtual ~ApplicationAccessible() {}
// Accessible
virtual void CacheChildren();

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

@ -39,6 +39,7 @@ public:
virtual bool RemoveChild(Accessible* aChild) MOZ_OVERRIDE MOZ_FINAL;
protected:
virtual ~LeafAccessible() {}
// Accessible
virtual void CacheChildren();
@ -77,6 +78,8 @@ public:
virtual already_AddRefed<nsIURI> AnchorURIAt(uint32_t aAnchorIndex);
protected:
virtual ~LinkableAccessible() {}
// Accessible
virtual void BindToParent(Accessible* aParent, uint32_t aIndexInParent);
virtual void UnbindFromParent();
@ -97,7 +100,6 @@ class EnumRoleAccessible : public AccessibleWrap
public:
EnumRoleAccessible(nsIContent* aContent, DocAccessible* aDoc,
a11y::role aRole);
virtual ~EnumRoleAccessible() { }
NS_DECL_ISUPPORTS_INHERITED
@ -105,6 +107,8 @@ public:
virtual a11y::role NativeRole();
protected:
virtual ~EnumRoleAccessible() { }
a11y::role mRole;
};

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

@ -58,7 +58,6 @@ public:
DocAccessible(nsIDocument* aDocument, nsIContent* aRootContent,
nsIPresShell* aPresShell);
virtual ~DocAccessible();
// nsIAccessible
NS_IMETHOD TakeFocus(void);
@ -311,6 +310,7 @@ public:
void RecreateAccessible(nsIContent* aContent);
protected:
virtual ~DocAccessible();
void LastRelease();

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

@ -43,6 +43,9 @@ public:
// Widgets
virtual bool IsWidget() const;
protected:
virtual ~ProgressMeterAccessible() {}
};
/**

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

@ -40,7 +40,6 @@ class HyperTextAccessible : public AccessibleWrap,
{
public:
HyperTextAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~HyperTextAccessible() { }
NS_DECL_ISUPPORTS_INHERITED
@ -416,6 +415,8 @@ public:
dom::Selection* DOMSelection() const;
protected:
virtual ~HyperTextAccessible() { }
// Accessible
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
virtual void CacheChildren() MOZ_OVERRIDE;

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

@ -35,6 +35,10 @@ ImageAccessible::
mType = eImageType;
}
ImageAccessible::~ImageAccessible()
{
}
NS_IMPL_ISUPPORTS_INHERITED(ImageAccessible, Accessible,
nsIAccessibleImage)

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

@ -44,6 +44,8 @@ public:
virtual uint8_t ActionCount();
protected:
virtual ~ImageAccessible();
// Accessible
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;

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

@ -24,7 +24,6 @@ class OuterDocAccessible : public AccessibleWrap
{
public:
OuterDocAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~OuterDocAccessible();
NS_DECL_ISUPPORTS_INHERITED
@ -47,6 +46,8 @@ public:
virtual uint8_t ActionCount();
protected:
virtual ~OuterDocAccessible();
// Accessible
virtual void CacheChildren();
};

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

@ -24,7 +24,6 @@ class RootAccessible : public DocAccessibleWrap,
public:
RootAccessible(nsIDocument* aDocument, nsIContent* aRootContent,
nsIPresShell* aPresShell);
virtual ~RootAccessible();
// nsIDOMEventListener
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent);
@ -44,6 +43,7 @@ public:
virtual void DocumentActivated(DocAccessible* aDocument);
protected:
virtual ~RootAccessible();
/**
* Add/remove DOM event listeners.

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

@ -18,13 +18,15 @@ class HTMLCanvasAccessible : public HyperTextAccessibleWrap
{
public:
HTMLCanvasAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~HTMLCanvasAccessible() { }
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
protected:
virtual ~HTMLCanvasAccessible() { }
};
} // namespace a11y

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

@ -64,6 +64,7 @@ public:
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
protected:
virtual ~HTMLLabelAccessible() {}
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
};
@ -83,6 +84,9 @@ public:
virtual a11y::role NativeRole();
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
protected:
virtual ~HTMLOutputAccessible() {}
};
} // namespace a11y

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

@ -141,6 +141,8 @@ public:
virtual Accessible* ContainerWidget() const;
protected:
virtual ~HTMLTextFieldAccessible() {}
// Accessible
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;

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

@ -20,7 +20,6 @@ class HTMLImageMapAccessible : public ImageAccessibleWrap
{
public:
HTMLImageMapAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~HTMLImageMapAccessible() { }
// nsISupports and cycle collector
NS_DECL_ISUPPORTS_INHERITED
@ -44,6 +43,7 @@ public:
Accessible* GetChildAccessibleFor(const nsINode* aNode) const;
protected:
virtual ~HTMLImageMapAccessible() { }
// Accessible
virtual void CacheChildren();

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

@ -37,6 +37,8 @@ public:
virtual already_AddRefed<nsIURI> AnchorURIAt(uint32_t aAnchorIndex);
protected:
virtual ~HTMLLinkAccessible() {}
enum { eAction_Jump = 0 };
/**

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

@ -23,7 +23,6 @@ class HTMLListAccessible : public HyperTextAccessibleWrap
public:
HTMLListAccessible(nsIContent* aContent, DocAccessible* aDoc) :
HyperTextAccessibleWrap(aContent, aDoc) { mGenericTypes |= eList; }
virtual ~HTMLListAccessible() { }
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -31,6 +30,9 @@ public:
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
protected:
virtual ~HTMLListAccessible() { }
};
@ -41,7 +43,6 @@ class HTMLLIAccessible : public HyperTextAccessibleWrap
{
public:
HTMLLIAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~HTMLLIAccessible() { }
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -60,6 +61,8 @@ public:
void UpdateBullet(bool aHasBullet);
protected:
virtual ~HTMLLIAccessible() { }
// Accessible
virtual void CacheChildren();

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

@ -55,6 +55,8 @@ public:
virtual bool Selected() MOZ_OVERRIDE;
protected:
virtual ~HTMLTableCellAccessible() {}
/**
* Return host table accessible.
*/
@ -97,12 +99,14 @@ public:
mType = eHTMLTableRowType;
mGenericTypes |= eTableRow;
}
virtual ~HTMLTableRowAccessible() { }
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
protected:
virtual ~HTMLTableRowAccessible() { }
};
@ -173,6 +177,8 @@ public:
virtual Relation RelationByType(RelationType aRelationType) MOZ_OVERRIDE;
protected:
virtual ~HTMLTableAccessible() {}
// Accessible
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
virtual void CacheChildren();

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

@ -21,6 +21,10 @@ XULAlertAccessible::
{
}
XULAlertAccessible::~XULAlertAccessible()
{
}
NS_IMPL_ISUPPORTS_INHERITED0(XULAlertAccessible, Accessible)
role

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

@ -30,6 +30,9 @@ public:
// Widgets
virtual bool IsWidget() const;
virtual Accessible* ContainerWidget() const;
protected:
~XULAlertAccessible();
};
} // namespace a11y

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

@ -184,6 +184,10 @@ XULLinkAccessible::
{
}
XULLinkAccessible::~XULLinkAccessible()
{
}
// Expose nsIAccessibleHyperLink unconditionally
NS_IMPL_ISUPPORTS_INHERITED(XULLinkAccessible, XULLabelAccessible,
nsIAccessibleHyperLink)

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

@ -106,6 +106,8 @@ public:
virtual already_AddRefed<nsIURI> AnchorURIAt(uint32_t aAnchorIndex);
protected:
virtual ~XULLinkAccessible();
// Accessible
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;

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

@ -47,6 +47,10 @@ XULButtonAccessible::
}
}
XULButtonAccessible::~XULButtonAccessible()
{
}
////////////////////////////////////////////////////////////////////////////////
// XULButtonAccessible: nsISupports

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

@ -55,6 +55,8 @@ public:
virtual bool IsAcceptableChild(Accessible* aPossibleChild) const MOZ_OVERRIDE;
protected:
virtual ~XULButtonAccessible();
// XULButtonAccessible
bool ContainsMenu();
};

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

@ -586,6 +586,10 @@ XULListitemAccessible::
mType = eXULListItemType;
}
XULListitemAccessible::~XULListitemAccessible()
{
}
NS_IMPL_ISUPPORTS_INHERITED0(XULListitemAccessible, Accessible)
Accessible*

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

@ -67,7 +67,6 @@ class XULListboxAccessible : public XULSelectControlAccessible,
{
public:
XULListboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~XULListboxAccessible() {}
NS_DECL_ISUPPORTS_INHERITED
@ -107,6 +106,8 @@ public:
virtual Accessible* ContainerWidget() const;
protected:
virtual ~XULListboxAccessible() {}
bool IsMulticolumn();
};
@ -121,7 +122,6 @@ public:
NS_DECL_ISUPPORTS_INHERITED
XULListitemAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~XULListitemAccessible() {}
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t index, nsAString& aName);
@ -138,6 +138,8 @@ public:
virtual Accessible* ContainerWidget() const;
protected:
virtual ~XULListitemAccessible();
// Accessible
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
@ -181,6 +183,9 @@ public:
virtual uint32_t RowIdx() const MOZ_OVERRIDE;
virtual void ColHeaderCells(nsTArray<Accessible*>* aHeaderCells) MOZ_OVERRIDE;
virtual bool Selected() MOZ_OVERRIDE;
protected:
virtual ~XULListCellAccessible() {}
};
} // namespace a11y

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

@ -62,6 +62,10 @@ XULTreeAccessible::
}
}
XULTreeAccessible::~XULTreeAccessible()
{
}
////////////////////////////////////////////////////////////////////////////////
// XULTreeAccessible: nsISupports and cycle collection implementation
@ -703,6 +707,10 @@ XULTreeItemAccessibleBase::
mStateFlags |= eSharedNode;
}
XULTreeItemAccessibleBase::~XULTreeItemAccessibleBase()
{
}
////////////////////////////////////////////////////////////////////////////////
// XULTreeItemAccessibleBase: nsISupports implementation
@ -1103,6 +1111,10 @@ XULTreeItemAccessible::
GetCellName(mColumn, mCachedName);
}
XULTreeItemAccessible::~XULTreeItemAccessible()
{
}
////////////////////////////////////////////////////////////////////////////////
// XULTreeItemAccessible: nsISupports implementation

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

@ -107,6 +107,8 @@ public:
void TreeViewChanged(nsITreeView* aView);
protected:
virtual ~XULTreeAccessible();
/**
* Creates tree item accessible for the given row index.
*/
@ -190,6 +192,8 @@ public:
virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx) = 0;
protected:
virtual ~XULTreeItemAccessibleBase();
enum { eAction_Click = 0, eAction_Expand = 1 };
// Accessible
@ -242,6 +246,7 @@ public:
virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx);
protected:
virtual ~XULTreeItemAccessible();
// Accessible
virtual void CacheChildren();

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

@ -22,6 +22,10 @@
using namespace mozilla::a11y;
XULTreeGridAccessible::~XULTreeGridAccessible()
{
}
////////////////////////////////////////////////////////////////////////////////
// XULTreeGridAccessible: nsISupports implementation
@ -262,6 +266,10 @@ XULTreeGridRowAccessible::
mGenericTypes |= eTableRow;
}
XULTreeGridRowAccessible::~XULTreeGridRowAccessible()
{
}
////////////////////////////////////////////////////////////////////////////////
// XULTreeGridRowAccessible: nsISupports and cycle collection implementation
@ -450,6 +458,10 @@ XULTreeGridCellAccessible::
mTreeView->GetCellText(mRow, mColumn, mCachedTextEquiv);
}
XULTreeGridCellAccessible::~XULTreeGridCellAccessible()
{
}
////////////////////////////////////////////////////////////////////////////////
// XULTreeGridCellAccessible: nsISupports implementation

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

@ -60,6 +60,7 @@ public:
virtual a11y::role NativeRole();
protected:
virtual ~XULTreeGridAccessible();
// XULTreeAccessible
virtual already_AddRefed<Accessible>
@ -100,6 +101,7 @@ public:
virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx);
protected:
virtual ~XULTreeGridRowAccessible();
// Accessible
virtual void CacheChildren();
@ -184,6 +186,8 @@ public:
bool CellInvalidated();
protected:
virtual ~XULTreeGridCellAccessible();
// Accessible
virtual Accessible* GetSiblingAtOffset(int32_t aOffset,
nsresult* aError = nullptr) const;

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

@ -2632,24 +2632,14 @@ function BrowserReloadWithFlags(reloadFlags) {
return;
}
/* First, we'll try to use the session history object to reload so
* that framesets are handled properly. If we're in a special
* window (such as view-source) that has no session history, fall
* back on using the web navigation's reload method.
*/
let windowUtils = window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils);
var webNav = gBrowser.webNavigation;
try {
var sh = webNav.sessionHistory;
if (sh)
webNav = sh.QueryInterface(nsIWebNavigation);
} catch (e) {
}
try {
webNav.reload(reloadFlags);
} catch (e) {
}
gBrowser.selectedBrowser
.messageManager
.sendAsyncMessage("Browser:Reload",
{ flags: reloadFlags,
handlingUserInput: windowUtils.isHandlingUserInput });
}
var PrintPreviewListener = {

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

@ -34,6 +34,34 @@ addMessageListener("Browser:HideSessionRestoreButton", function (message) {
}
});
addMessageListener("Browser:Reload", function(message) {
/* First, we'll try to use the session history object to reload so
* that framesets are handled properly. If we're in a special
* window (such as view-source) that has no session history, fall
* back on using the web navigation's reload method.
*/
let webNav = docShell.QueryInterface(Ci.nsIWebNavigation);
try {
let sh = webNav.sessionHistory;
if (sh)
webNav = sh.QueryInterface(Ci.nsIWebNavigation);
} catch (e) {
}
let reloadFlags = message.data.flags;
let handlingUserInput;
try {
handlingUserInput = content.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils)
.setHandlingUserInput(message.data.handlingUserInput);
webNav.reload(reloadFlags);
} catch (e) {
} finally {
handlingUserInput.destruct();
}
});
addEventListener("DOMFormHasPassword", function(event) {
InsecurePasswordUtils.checkForInsecurePasswords(event.target);
LoginManagerContent.onFormPassword(event);

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

@ -173,7 +173,13 @@ function MixedTest6B() {
function MixedTest6C() {
gTestBrowser.removeEventListener("load", MixedTest6C, true);
waitForCondition(function() content.document.getElementById('f1').contentDocument.getElementById('p1').innerHTML == "hello", MixedTest6D, "Waited too long for mixed script to run in Test 6");
waitForCondition(function() {
try {
return content.document.getElementById('f1').contentDocument.getElementById('p1').innerHTML == "hello";
} catch (e) {
return false;
}
}, MixedTest6D, "Waited too long for mixed script to run in Test 6");
}
function MixedTest6D() {
ok(content.document.getElementById('f1').contentDocument.getElementById('p1').innerHTML == "hello","Mixed script didn't load in Test 6");

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

@ -14,7 +14,7 @@ const kWhitelist = [
{sourceName: /codemirror\.css/i}, /* CodeMirror is imported as-is, see bug 1004423 */
{sourceName: /web\/viewer\.css/i, errorMessage: /Unknown pseudo-class.*(fullscreen|selection)/i }, /* PDFjs is futureproofing its pseudoselectors, and those rules are dropped. */
{sourceName: /aboutaccounts\/(main|normalize)\.css/i}, /* Tracked in bug 1004428 */
{sourceName: /otcdn\/webrtc\/.*\.css$/i /* TokBox SDK assets, see bug 1003029 */}
{sourceName: /loop\/.*sdk-content\/.*\.css$/i /* TokBox SDK assets, see bug 1032469 */}
];
/**

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

@ -17,6 +17,14 @@
<div id="main"></div>
<script type="text/javascript" src="loop/libs/l10n.js"></script>
<script>
window.OTProperties = {
cdnURL: 'loop/',
};
window.OTProperties.assetURL = window.OTProperties.cdnURL + 'sdk-content/';
window.OTProperties.configURL = window.OTProperties.assetURL + 'js/dynamic_config.min.js';
window.OTProperties.cssURL = window.OTProperties.assetURL + 'css/ot.css';
</script>
<script type="text/javascript" src="loop/libs/sdk.js"></script>
<script type="text/javascript" src="loop/shared/libs/jquery-2.1.0.js"></script>
<script type="text/javascript" src="loop/shared/libs/lodash-2.4.1.js"></script>

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -1,28 +0,0 @@
/**
* @license OpenTok JavaScript Library v2.2.5
* http://www.tokbox.com/
*
* Copyright (c) 2014 TokBox, Inc.
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
* Date: May 22 07:14:18 2014
*/
!(function() {
TB.Config.replaceWith({
global: {
exceptionLogging: {
enabled: true,
messageLimitPerPartner: 100
},
iceServers: {
enabled: false
},
},
partners: {
}
});
})(TB);

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

@ -0,0 +1,973 @@
/*!
* Copyright (c) 2014 TokBox, Inc.
* Released under the MIT license
* http://opensource.org/licenses/MIT
*/
/**
* OT Base styles
*/
/* Root OT object, this is where our CSS reset happens */
.OT_root,
.OT_root * {
color: #ffffff;
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font-family: Arial, Helvetica, sans-serif;
vertical-align: baseline;
}
/**
* Specific Element Reset
*/
.OT_root h1,
.OT_root h2,
.OT_root h3,
.OT_root h4,
.OT_root h5,
.OT_root h6 {
color: #ffffff;
font-family: Arial, Helvetica, sans-serif;
font-size: 100%;
font-weight: bold;
}
.OT_root header {
}
.OT_root footer {
}
.OT_root div {
}
.OT_root section {
}
.OT_root video {
}
.OT_root button {
}
.OT_root strong {
font-weight: bold;
}
.OT_root em {
font-style: italic;
}
.OT_root a,
.OT_root a:link,
.OT_root a:visited,
.OT_root a:hover,
.OT_root a:active {
font-family: Arial, Helvetica, sans-serif;
}
.OT_root ul, .OT_root ol {
margin: 1em 1em 1em 2em;
}
.OT_root ol {
list-style: decimal outside;
}
.OT_root ul {
list-style: disc outside;
}
.OT_root dl {
margin: 4px;
}
.OT_root dl dt,
.OT_root dl dd {
float: left;
margin: 0;
padding: 0;
}
.OT_root dl dt {
clear: left;
text-align: right;
width: 50px;
}
.OT_root dl dd {
margin-left: 10px;
}
.OT_root img {
border: 0 none;
}
/* Modal dialog styles */
/* Modal dialog styles */
.OT_dialog {
border: none;
border-radius: 0;
top: 50%;
left: 50%;
position: absolute;
position: fixed;
padding: 0;
background-color: #363636;
color: #fff;
z-index: 9999;
box-shadow: 2px 4px 6px #999;
font-family: 'Didact Gothic', sans-serif;
}
.OT_dialog-blackout {
position: absolute;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: #363636;
}
.OT_dialog-blackout .OT_dialog {
box-shadow: 0 0 0 transparent;
}
.OT_dialog * {
font-family: 'Didact Gothic', sans-serif;
}
.OT_dialog-plugin-prompt {
margin-left: -350px;
margin-top: -141px;
width: 650px;
height: 282px;
}
.OT_dialog-plugin-reinstall {
margin-left: -271px;
margin-top: -117px;
width: 542px;
height: 234px;
}
.OT_dialog-plugin-upgrading {
margin-left: -267px;
margin-top: -94px;
width: 514px;
height: 188px;
}
.OT_dialog-allow-deny-chrome-first {
margin-left: -227px;
margin-top: -122px;
width: 453px;
height: 244px;
}
.OT_dialog-allow-deny-chrome-pre-denied {
margin-left: -263px;
margin-top: -135px;
width: 526px;
height: 270px;
}
.OT_dialog-allow-deny-chrome-now-denied {
margin-left: -120px;
margin-top: -85px;
width: 256px;
height: 170px;
}
.OT_dialog-allow-deny-firefox-denied {
margin-left: -160px;
margin-top: -105px;
width: 320px;
height: 190px;
}
.OT_dialog-allow-deny-firefox-maybe-denied {
margin-left: -281px;
margin-top: -126px;
width: 562px;
height: 252px;
}
.OT_dialog-allow-highlight-chrome {
display: inline-block;
margin-top: 20px;
width: 227px;
height: 94px;
background-image: url(../images/rtc/access-prompt-chrome.png);
}
.OT_closeButton {
top: 15px;
right: 15px;
position: absolute;
font-size: 18px;
cursor: pointer;
}
.OT_dialog-messages {
position: absolute;
top: 32px;
left: 32px;
right: 32px;
text-align: center;
}
.OT_dialog-allow-deny-firefox-maybe-denied .OT_dialog-messages {
top: 45px;
}
.OT_dialog-messages-main {
font-weight: 300;
font-size: 18pt;
line-height: 24px;
}
.OT_dialog-messages-minor {
font-weight: 300;
margin-top: 12px;
font-size: 13px;
line-height: 18px;
color: #A4A4A4;
}
.OT_dialog-allow-deny-firefox-maybe-denied .OT_dialog-messages-minor {
margin-top: 4px;
}
.OT_dialog-messages-minor strong {
font-weight: 300;
color: #ffffff;
}
.OT_dialog-single-button {
position: absolute;
bottom: 41px;
left: 50%;
margin-left: -97px;
height: 47px;
width: 193px;
}
.OT_dialog-button-pair {
position: absolute;
bottom: 45px;
left: 5px;
right: 0;
height: 94px;
}
.OT_dialog-button-with-title {
padding-left: 30px;
padding-right: 30px;
width: 260px;
float: left;
}
.OT_dialog-button-pair-seperator {
border-right: 1px solid #555555;
height: 112px;
width: 1px;
float: left;
}
.OT_dialog-button-title {
font-weight: 300;
text-align: center;
margin-bottom: 15px;
font-size: 12px;
line-height: 150%;
color: #A4A4A4;
}
.OT_dialog-button-title strong {
color: #ffffff;
font-weight: 100;
display: block;
}
.OT_dialog-button {
font-weight: 100;
display: block;
line-height: 50px;
height: 47px;
background-color: #29A4DA;
text-align: center;
font-size: 16pt;
cursor: pointer;
}
.OT_dialog-button.OT_dialog-button-large {
line-height: 60px;
height: 58px;
}
.OT_dialog-progress-bar {
border: 1px solid #4E4E4E;
height: 8px;
}
.OT_dialog-progress-bar-fill {
background-color: #29A4DA;
height: 10px;
margin-top: -1px;
margin-left: -1px;
margin-right: -1px;
}
.OT_dialog-plugin-upgrading .OT_dialog-plugin-upgrade-percentage {
font-size: 36pt;
font-weight: 100;
}
.OT_dialog-plugin-upgrading .OT_dialog-progress-bar {
margin-top: 25px;
margin-bottom: 25px;
}
.OT_dialog-3steps {
margin-top: 24px;
}
.OT_dialog-allow-deny-firefox-maybe-denied .OT_dialog-3steps {
margin-top: 21px;
}
.OT_dialog-3steps-step {
float: left;
-moz-box-sizing: border-box;
box-sizing: border-box;
width: 33%;
height: 140px;
padding: 0 10px;
color: #A4A4A4;
}
.OT_dialog-3steps-seperator {
float: left;
-moz-box-sizing: border-box;
box-sizing: border-box;
margin-top: 10px;
width: 1px;
height: 68px;
background-color: #555555;
}
.OT_dialog-allow-deny-chrome-pre-denied .OT_dialog-3steps-seperator {
margin-top: 16px;
}
.OT_dialog-3steps-step-num {
font-size: 20px;
background-color: #2AA3D8;
border-radius: 20px;
line-height: 33px;
height: 33px;
width: 33px;
margin: 0 auto 17px;
}
.OT_dialog-allow-deny-chrome-pre-denied .OT_dialog-3steps-step-num {
margin-bottom: 10px;
}
.OT_dialog-allow-camera-icon {
background-color: #000;
width: 113px;
height: 48px;
margin: 10px auto 0;
background-image: url(../images/rtc/access-predenied-chrome.png);
}
/* Publisher Deny Helpers */
.OT_publisher-denied-firefox {
background-color: #fff;
}
.OT_publisher-denied-firefox p {
width: 232px;
height: 103px;
top: 50%;
left: 50%;
display: block;
position: absolute;
margin-top: -52px;
margin-left: -116px;
background-image: url(../images/rtc/access-denied-firefox.png);
background-position: 50% 0;
background-repeat: no-repeat;
}
.OT_publisher-denied-firefox span {
display: block;
position: absolute;
bottom: 0;
right: 0;
left: 0;
margin: 0 auto;
width: 232px;
height: 31px;
background-image: url(../images/rtc/access-denied-copy-firefox.png);
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
}
.OT_centered {
position: fixed;
left: 50%;
top: 50%;
margin: 0;
}
/* Publisher and Subscriber styles */
.OT_publisher, .OT_subscriber {
position: relative;
min-width: 48px;
min-height: 48px;
}
.OT_publisher video,
.OT_subscriber video {
width: 100%;
height: 100%;
}
/* Styles that are applied when the video element should be mirrored */
.OT_publisher.OT_mirrored video{
-webkit-transform: scale(-1, 1);
-moz-transform:scale(-1,1);
}
.OT_subscriber_error {
background-color: #000;
color: #fff;
text-align: center;
}
.OT_subscriber_error > p {
padding: 20px;
}
/* The publisher/subscriber name/mute background */
.OT_publisher .OT_bar,
.OT_subscriber .OT_bar,
.OT_publisher .OT_name,
.OT_subscriber .OT_name,
.OT_publisher .OT_archiving,
.OT_subscriber .OT_archiving,
.OT_publisher .OT_archiving-status,
.OT_subscriber .OT_archiving-status,
.OT_publihser .OT_archiving-light-box,
.OT_subscriber .OT_archiving-light-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
top: 0;
left: 0;
right: 0;
display: block;
height: 34px;
position: absolute;
}
.OT_publisher .OT_bar,
.OT_subscriber .OT_bar {
background: rgba(0, 0, 0, 0.4);
}
/* The publisher/subscriber name panel/archiving status bar */
.OT_publisher .OT_name,
.OT_subscriber .OT_name {
background-color: transparent;
color: #ffffff;
font-size: 15px;
line-height: 34px;
font-weight: normal;
padding: 0 4px 0 36px;
}
.OT_publisher .OT_archiving-status,
.OT_subscriber .OT_archiving-status {
background: rgba(0, 0, 0, 0.4);
top: auto;
bottom: 0;
left: 34px;
padding: 0 4px;
color: rgba(255,255,255,0.8);
font-size: 15px;
line-height: 34px;
font-weight: normal;
}
.OT_micro .OT_archiving-status,
.OT_micro:hover .OT_archiving-status,
.OT_mini .OT_archiving-status,
.OT_mini:hover .OT_archiving-status {
display: none;
}
.OT_publisher .OT_archiving-light-box,
.OT_subscriber .OT_archiving-light-box {
background: rgba(0, 0, 0, 0.4);
top: auto;
bottom: 0;
right: auto;
width: 34px;
height: 34px;
}
.OT_archiving-light {
width: 7px;
height: 7px;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
border-radius: 30px;
position: absolute;
top: 14px;
left: 14px;
background-color: #575757;
-webkit-box-shadow: 0 0 5px 1px #575757;
-moz-box-shadow: 0 0 5px 1px #575757;
box-shadow: 0 0 5px 1px #575757;
}
.OT_archiving-light.OT_active {
background-color: #970d13;
-webkit-animation: OT_pulse 1.3s ease-in;
-moz-animation: OT_pulse 1.3s ease-in;
-webkit-animation: OT_pulse 1.3s ease-in;
-webkit-animation-iteration-count: infinite;
-moz-animation-iteration-count: infinite;
-webkit-animation-iteration-count: infinite;
}
@-moz-keyframes OT_pulse {
0% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
30% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
50% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
80% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
100% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
}
@-webkit-keyframes OT_pulse {
0% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
30% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
50% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
80% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
100% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
}
@-o-keyframes OT_pulse {
0% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
30% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
50% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
80% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
100% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
}
@-ms-keyframes OT_pulse {
0% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
30% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
50% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
80% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
100% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
}
@-webkit-keyframes OT_pulse {
0% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
30% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
50% {
-webkit-box-shadow: 0 0 5px 1px #c70019;
-moz-box-shadow: 0 0 5px 1px #c70019;
box-shadow: 0 0 5px 1px #c70019;
}
80% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
100% {
-webkit-box-shadow: 0 0 0px 0px #c70019;
-moz-box-shadow: 0 0 0px 0px #c70019;
box-shadow: 0 0 0px 0px #c70019;
}
}
.OT_mini .OT_bar,
.OT_bar.OT_mode-mini,
.OT_bar.OT_mode-mini-auto {
bottom: 0;
height: auto;
}
.OT_mini .OT_name.OT_mode-off,
.OT_mini .OT_name.OT_mode-on,
.OT_mini .OT_name.OT_mode-auto,
.OT_mini:hover .OT_name.OT_mode-auto {
display: none;
}
.OT_publisher .OT_name,
.OT_subscriber .OT_name {
left: 24px;
right: 37px;
height: 34px;
}
.OT_publisher .OT_name-no-bug,
.OT_subscriber .OT_name-no-bug {
left: 10px;
padding-left: 0;
}
.OT_publisher .OT_mute,
.OT_subscriber .OT_mute,
.OT_publisher .OT_opentok,
.OT_subscriber .OT_opentok {
border: none;
cursor: pointer;
display: block;
position: absolute;
text-align: center;
text-indent: -9999em;
background-color: transparent;
background-repeat: no-repeat;
}
.OT_publisher .OT_opentok,
.OT_subscriber .OT_opentok {
background: url(../images/rtc/buttons.png) 0 -32px no-repeat;
cursor: default;
height: 18px;
left: 8px;
line-height: 18px;
top: 8px;
width: 16px;
}
.OT_micro .OT_opentok {
display: none !important;
}
.OT_publisher .OT_mute,
.OT_subscriber .OT_mute {
right: 0;
top: 0;
border-left: 1px solid rgba(255, 255, 255, 0.2);
height: 36px;
width: 37px;
}
.OT_mini .OT_mute,
.OT_mute.OT_mode-mini,
.OT_mute.OT_mode-mini-auto {
top: 50%;
left: 50%;
right: auto;
margin-top: -18px;
margin-left: -18.5px;
border-left: none;
}
.OT_publisher .OT_mute {
background-image: url(../images/rtc/mic-on.png);
background-position: 9px 5px;
}
.OT_publisher .OT_mute.OT_active {
background-image: url(../images/rtc/mic-off.png);
background-position: 9px 4px;
}
.OT_subscriber .OT_mute {
background-image: url(../images/rtc/speaker-on.png);
background-position: 8px 7px;
}
.OT_subscriber .OT_mute.OT_active {
background-image: url(../images/rtc/speaker-off.png);
background-position: 7px 7px;
}
/* Disabling this for now - see https://jira.tokbox.com/browse/OPENTOK-8870
.OT_publisher .OT_opentok:hover:after,
.OT_subscriber .OT_opentok:hover:after {
content: 'tokbox';
color: #fff;
font-weight: bold;
font-size: 14px;
letter-spacing: -1px;
top: 20px;
opacity: 0.5;
position: absolute;
text-indent: 0;
top: 0;
}*/
/**
* Styles for display modes
*
* Note: It's important that these completely control the display and opacity
* attributes, no other selectors should atempt to change them.
*/
/* Default display mode transitions for various chrome elements */
.OT_publisher .OT_edge-bar-item,
.OT_subscriber .OT_edge-bar-item {
-ms-transition-property: top, bottom, opacity;
-ms-transition-duration: 0.5s;
-moz-transition-property: top, bottom, opacity;
-moz-transition-duration: 0.5s;
-webkit-transition-property: top, bottom, opacity;
-webkit-transition-duration: 0.5s;
-o-transition-property: top, bottom, opacity;
-o-transition-duration: 0.5s;
transition-property: top, bottom, opacity;
transition-duration: 0.5s;
transition-timing-function: ease-in;
}
.OT_publisher .OT_edge-bar-item.OT_mode-off,
.OT_subscriber .OT_edge-bar-item.OT_mode-off,
.OT_publisher .OT_edge-bar-item.OT_mode-auto,
.OT_subscriber .OT_edge-bar-item.OT_mode-auto,
.OT_publisher .OT_edge-bar-item.OT_mode-mini-auto,
.OT_subscriber .OT_edge-bar-item.OT_mode-mini-auto {
top: -25px;
opacity: 0;
}
.OT_mini .OT_mute.OT_mode-auto,
.OT_publisher .OT_mute.OT_mode-mini-auto,
.OT_subscriber .OT_mute.OT_mode-mini-auto {
top: 50%;
}
.OT_publisher .OT_edge-bar-item.OT_edge-bottom.OT_mode-off,
.OT_subscriber .OT_edge-bar-item.OT_edge-bottom.OT_mode-off,
.OT_publisher .OT_edge-bar-item.OT_edge-bottom.OT_mode-auto,
.OT_subscriber .OT_edge-bar-item.OT_edge-bottom.OT_mode-auto,
.OT_publisher .OT_edge-bar-item.OT_edge-bottom.OT_mode-mini-auto,
.OT_subscriber .OT_edge-bar-item.OT_edge-bottom.OT_mode-mini-auto {
top: auto;
bottom: -25px;
}
.OT_publisher .OT_edge-bar-item.OT_mode-on,
.OT_subscriber .OT_edge-bar-item.OT_mode-on,
.OT_publisher:hover .OT_edge-bar-item.OT_mode-auto,
.OT_subscriber:hover .OT_edge-bar-item.OT_mode-auto,
.OT_publisher:hover .OT_edge-bar-item.OT_mode-mini-auto,
.OT_subscriber:hover .OT_edge-bar-item.OT_mode-mini-auto {
top: 0;
opacity: 1;
}
.OT_mini .OT_mute.OT_mode-on,
.OT_mini:hover .OT_mute.OT_mode-auto,
.OT_mute.OT_mode-mini,
.OT_root:hover .OT_mute.OT_mode-mini-auto {
top: 50%;
}
.OT_publisher .OT_edge-bar-item.OT_edge-bottom.OT_mode-on,
.OT_subscriber .OT_edge-bar-item.OT_edge-bottom.OT_mode-on,
.OT_publisher:hover .OT_edge-bar-item.OT_edge-bottom.OT_mode-auto,
.OT_subscriber:hover .OT_edge-bar-item.OT_edge-bottom.OT_mode-auto {
top: auto;
bottom: 0;
opacity: 1;
}
.OT_publisher .OT_opentok.OT_mode-off,
.OT_publisher .OT_opentok.OT_mode-auto,
.OT_subscriber .OT_opentok.OT_mode-off,
.OT_subscriber .OT_opentok.OT_mode-auto {
top: -17px;
}
.OT_publisher .OT_opentok.OT_mode-on,
.OT_publisher:hover .OT_opentok.OT_mode-auto,
.OT_subscriber .OT_opentok.OT_mode-on,
.OT_subscriber:hover .OT_opentok.OT_mode-auto {
top: 8px;
}
/* Contains the video element, used to fix video letter-boxing */
.OT_video-container {
position: absolute;
background-color: #000000;
overflow: hidden;
}
.OT_hidden-audio {
position: absolute !important;
height: 1px !important;
width: 1px !important;
}
/* Load animation */
.OT_root .OT_video-loading {
background: url('../images/rtc/loader.gif') no-repeat;
display:none;
position: absolute;
width: 32px;
height: 32px;
left: 50%;
top: 50%;
margin-left: -16px;
margin-top: -16px;
}
.OT_publisher.OT_loading .OT_video-loading,
.OT_subscriber.OT_loading .OT_video-loading {
display: block;
}
.OT_publisher.OT_loading video,
.OT_subscriber.OT_loading video {
display: none;
}
.OT_video-poster {
width: 100%;
height: 100%;
background-position: 50% 50%;
background-repeat: no-repeat;
display: none;
}
.OT_publisher .OT_video-poster {
background-image: url(../images/rtc/audioonly-publisher.png);
}
.OT_subscriber .OT_video-poster {
background-image: url(../images/rtc/audioonly-subscriber.png);
}

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

До

Ширина:  |  Высота:  |  Размер: 10 KiB

После

Ширина:  |  Высота:  |  Размер: 10 KiB

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

До

Ширина:  |  Высота:  |  Размер: 6.4 KiB

После

Ширина:  |  Высота:  |  Размер: 6.4 KiB

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

До

Ширина:  |  Высота:  |  Размер: 7.7 KiB

После

Ширина:  |  Высота:  |  Размер: 7.7 KiB

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

До

Ширина:  |  Высота:  |  Размер: 9.3 KiB

После

Ширина:  |  Высота:  |  Размер: 9.3 KiB

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

До

Ширина:  |  Высота:  |  Размер: 19 KiB

После

Ширина:  |  Высота:  |  Размер: 19 KiB

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

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

После

Ширина:  |  Высота:  |  Размер: 1.4 KiB

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

До

Ширина:  |  Высота:  |  Размер: 2.4 KiB

После

Ширина:  |  Высота:  |  Размер: 2.4 KiB

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

До

Ширина:  |  Высота:  |  Размер: 2.8 KiB

После

Ширина:  |  Высота:  |  Размер: 2.8 KiB

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

До

Ширина:  |  Высота:  |  Размер: 8.6 KiB

После

Ширина:  |  Высота:  |  Размер: 8.6 KiB

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

До

Ширина:  |  Высота:  |  Размер: 1.0 KiB

После

Ширина:  |  Высота:  |  Размер: 1.0 KiB

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

До

Ширина:  |  Высота:  |  Размер: 734 B

После

Ширина:  |  Высота:  |  Размер: 734 B

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

До

Ширина:  |  Высота:  |  Размер: 861 B

После

Ширина:  |  Высота:  |  Размер: 861 B

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

До

Ширина:  |  Высота:  |  Размер: 622 B

После

Ширина:  |  Высота:  |  Размер: 622 B

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

@ -0,0 +1,7 @@
/*
Copyright (c) 2014 TokBox, Inc.
Released under the MIT license
http://opensource.org/licenses/MIT
*/
!function(){TB.Config.replaceWith({global:{exceptionLogging:{enabled:!0,messageLimitPerPartner:100},iceServers:{enabled:!1},instrumentation:{enabled:!1,debugging:!1},tokshow:{textchat:!0}},partners:{change878:{instrumentation:{enabled:!0,debugging:!0}}}})}(TB);

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

@ -1,20 +1,20 @@
/**
* @license OpenTok JavaScript Library v2.2.5
* @license OpenTok JavaScript Library v2.2.6
* http://www.tokbox.com/
*
* Copyright (c) 2014 TokBox, Inc.
* Released under the MIT license
* http://opensource.org/licenses/MIT
*
* Date: May 22 07:14:18 2014
* Date: June 24 11:09:07 2014
*/
(function(window) {
if (!window.OT) window.OT = {};
OT.properties = {
version: 'v2.2.5', // The current version (eg. v2.0.4) (This is replaced by gradle)
build: '12d9384', // The current build hash (This is replaced by gradle)
version: 'v2.2.6', // The current version (eg. v2.0.4) (This is replaced by gradle)
build: 'd326ad1', // The current build hash (This is replaced by gradle)
// Whether or not to turn on debug logging by default
debug: 'false',
@ -22,12 +22,11 @@
websiteURL: 'http://www.tokbox.com',
// The URL of the CDN
// XXX: patched for loop so we use local files
cdnURL: 'loop/otcdn',
cdnURL: 'http://static.opentok.com',
// The URL to use for logging
loggingURL: 'https://hlg.tokbox.com/prod',
// The anvil API URL
apiURL: 'https://anvil.opentok.com',
apiURL: 'http://anvil.opentok.com',
// What protocol to use when connecting to the rumor web socket
messagingProtocol: 'wss',
@ -37,10 +36,7 @@
// If this environment supports SSL
supportSSL: 'true',
// The CDN to use if we're using SSL
// XXX: patched for loop so we use local files
cdnURLSSL: 'loop/otcdn',
// The loggging URL to use if we're using SSL
loggingURLSSL: 'https://hlg.tokbox.com/prod',
cdnURLSSL: 'https://static.opentok.com',
// The anvil API URL to use if we're using SSL
apiURLSSL: 'https://anvil.opentok.com',
@ -2886,6 +2882,9 @@ OTHelpers.centerElement = function(element, width, height) {
if (enumerable === void 0) enumerable = false;
for (var key in getters) {
if(!getters.hasOwnProperty(key)) {
continue;
}
propsDefinition[key] = {
get: getters[key],
enumerable: enumerable
@ -3018,13 +3017,20 @@ OTHelpers.centerElement = function(element, width, height) {
if (props.supportSSL && (window.location.protocol.indexOf('https') >= 0 ||
window.location.protocol.indexOf('chrome-extension') >= 0)) {
props.assetURL = props.cdnURLSSL + '/webrtc/' + props.version;
props.loggingURL = props.loggingURLSSL;
} else {
props.assetURL = props.cdnURL + '/webrtc/' + props.version;
}
props.configURL = props.assetURL + '/js/dynamic_config.min.js';
props.cssURL = props.assetURL + '/css/ot.min.css';
if (window.OTProperties) {
// Allow window.OTProperties to override cdnURL, configURL, assetURL and cssURL
if (window.OTProperties.cdnURL) props.cdnURL = window.OTProperties.cdnURL;
if (window.OTProperties.configURL) props.configURL = window.OTProperties.configURL;
if (window.OTProperties.assetURL) props.assetURL = window.OTProperties.assetURL;
if (window.OTProperties.cssURL) props.cssURL = window.OTProperties.cssURL;
}
return props;
}(OT.properties);
@ -3519,8 +3525,7 @@ OTHelpers.centerElement = function(element, width, height) {
/* global mozRTCPeerConnection */
var nativeGetUserMedia,
mozToW3CErrors,
chromeToW3CErrors,
vendorToW3CErrors,
gumNamesToMessages,
mapVendorErrorName,
parseErrorEvent,
@ -3601,21 +3606,19 @@ OTHelpers.centerElement = function(element, width, height) {
// Mozilla error strings and the equivalent W3C names. NOT_SUPPORTED_ERROR does not
// exist in the spec right now, so we'll include Mozilla's error description.
mozToW3CErrors = {
// Chrome TrackStartError is triggered when the camera is already used by another app (Windows)
vendorToW3CErrors = {
PERMISSION_DENIED: 'PermissionDeniedError',
NOT_SUPPORTED_ERROR: 'NotSupportedError',
MANDATORY_UNSATISFIED_ERROR: ' ConstraintNotSatisfiedError',
NO_DEVICES_FOUND: 'NoDevicesFoundError',
HARDWARE_UNAVAILABLE: 'HardwareUnavailableError'
};
// Chrome only seems to expose a single error with a code of 1 right now.
chromeToW3CErrors = {
1: 'PermissionDeniedError'
HARDWARE_UNAVAILABLE: 'HardwareUnavailableError',
TrackStartError: 'HardwareUnavailableError'
};
gumNamesToMessages = {
PermissionDeniedError: 'End-user denied permission to hardware devices',
PermissionDismissedError: 'End-user dismissed permission to hardware devices',
NotSupportedError: 'A constraint specified is not supported by the browser.',
ConstraintNotSatisfiedError: 'It\'s not possible to satisfy one or more constraints ' +
'passed into the getUserMedia function',
@ -3626,18 +3629,24 @@ OTHelpers.centerElement = function(element, width, height) {
'that the chosen devices are not in use by another application.'
};
// Map vendor error strings to names and messages
mapVendorErrorName = function mapVendorErrorName (vendorErrorName, vendorErrors) {
var errorName = vendorErrors[vendorErrorName],
errorMessage = gumNamesToMessages[errorName];
// Map vendor error strings to names and messages if possible
mapVendorErrorName = function mapVendorErrorName(vendorErrorName, vendorErrors) {
var errorName, errorMessage;
if (!errorMessage) {
if(vendorErrors.hasOwnProperty(vendorErrorName)) {
errorName = vendorErrors[vendorErrorName];
} else {
// This doesn't map to a known error from the Media Capture spec, it's
// probably a custom vendor error message.
errorMessage = null; // This is undefined?
errorName = vendorErrorName;
}
if(gumNamesToMessages.hasOwnProperty(errorName)) {
errorMessage = gumNamesToMessages[errorName];
} else {
errorMessage = 'Unknown Error while getting user media';
}
return {
name: errorName,
message: errorMessage
@ -3646,30 +3655,17 @@ OTHelpers.centerElement = function(element, width, height) {
// Parse and normalise a getUserMedia error event from Chrome or Mozilla
// @ref http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-NavigatorUserMediaError
parseErrorEvent = function parseErrorObject (event) {
parseErrorEvent = function parseErrorObject(event) {
var error;
if (OT.$.isObject(event) && event.name) {
error = {
name: event.name,
message: event.message || gumNamesToMessages[event.name],
constraintName: event.constraintName
};
} else if (OT.$.isObject(event)) {
error = mapVendorErrorName(event.code, chromeToW3CErrors);
// message and constraintName are probably missing if the
// property is also omitted, but just in case they aren't.
if (event.message) error.message = event.message;
if (event.constraintName) error.constraintName = event.constraintName;
} else if (event && mozToW3CErrors.hasOwnProperty(event)) {
error = mapVendorErrorName(event, mozToW3CErrors);
error = mapVendorErrorName(event.name, vendorToW3CErrors);
error.constraintName = event.constraintName;
} else if (typeof event === 'string') {
error = mapVendorErrorName(event, vendorToW3CErrors);
} else {
error = {
message: 'Unknown Error while getting user media'
message: 'Unknown Error type while getting media'
};
}
@ -3682,6 +3678,9 @@ OTHelpers.centerElement = function(element, width, height) {
if (!constraints || !OT.$.isObject(constraints)) return true;
for (var key in constraints) {
if(!constraints.hasOwnProperty(key)) {
continue;
}
if (constraints[key]) return false;
}
@ -3769,6 +3768,29 @@ OTHelpers.centerElement = function(element, width, height) {
return OT.$.supportsWebRTC() && OT.$.browser() === 'Chrome';
};
OT.$.shouldAskForDevices = function(callback) {
var memoiseReply = function(audio, video) {
OT.$.shouldAskForDevices = function(callback) {
setTimeout(callback.bind(null, { video: video, audio: audio }));
};
OT.$.shouldAskForDevices(callback);
};
var MST = window.MediaStreamTrack;
if(MST != null && OT.$.isFunction(MST.getSources)) {
window.MediaStreamTrack.getSources(function(sources) {
var hasAudio = sources.some(function(src) {
return src.kind === 'audio';
});
var hasVideo = sources.some(function(src) {
return src.kind === 'video';
});
memoiseReply(hasAudio, hasVideo);
});
} else {
memoiseReply(true, true);
}
};
// A wrapper for the builtin navigator.getUserMedia. In addition to the usual
// getUserMedia behaviour, this helper method also accepts a accessDialogOpened
// and accessDialogClosed callback.
@ -3850,23 +3872,8 @@ OTHelpers.centerElement = function(element, width, height) {
var error = parseErrorEvent(event);
// The error name 'PERMISSION_DENIED' is from an earlier version of the spec
if (error.name === 'PermissionDeniedError') {
var MST = window.MediaStreamTrack;
if(MST != null && OT.$.isFunction(MST.getSources)) {
window.MediaStreamTrack.getSources(function(sources) {
if(sources.length > 0) {
accessDenied.call(null, error);
} else {
failure.call(null, {
name: 'NoDevicesFoundError',
message: gumNamesToMessages.NoDevicesFoundError
});
}
});
} else {
accessDenied.call(null, error);
}
if (error.name === 'PermissionDeniedError' || error.name === 'PermissionDismissedError') {
accessDenied.call(null, error);
} else {
failure.call(null, error);
}
@ -4203,6 +4210,24 @@ OTHelpers.centerElement = function(element, width, height) {
this.trigger('orientationChanged');
}
},
// see https://wiki.mozilla.org/WebAPI/AudioChannels
// The audioChannelType is currently only available in Firefox. This property returns
// "unknown" in other browser. The related HTML tag attribute is "mozaudiochannel"
audioChannelType: {
get: function() {
if ('mozAudioChannelType' in this.domElement) {
return this.domElement.mozAudioChannelType;
} else {
return 'unknown';
}
},
set: function(type) {
if ('mozAudioChannelType' in this.domElement) {
this.domElement.mozAudioChannelType = type;
}
}
}
});
}
@ -4221,6 +4246,9 @@ OTHelpers.centerElement = function(element, width, height) {
}
for (var key in attributes) {
if(!attributes.hasOwnProperty(key)) {
continue;
}
videoElement.setAttribute(key, attributes[key]);
}
}
@ -5328,6 +5356,9 @@ OTHelpers.centerElement = function(element, width, height) {
return _models.filter(function(model) {
for (var key in attrsOrFilterFn) {
if(!attrsOrFilterFn.hasOwnProperty(key)) {
continue;
}
if (model[key] !== attrsOrFilterFn[key]) return false;
}
@ -5346,6 +5377,9 @@ OTHelpers.centerElement = function(element, width, height) {
else {
filterFn = function(model) {
for (var key in attrsOrFilterFn) {
if(!attrsOrFilterFn.hasOwnProperty(key)) {
continue;
}
if (model[key] !== attrsOrFilterFn[key]) return false;
}
@ -6194,6 +6228,19 @@ OTHelpers.centerElement = function(element, width, height) {
this.newValue = newValue;
};
/**
* Defines event objects for the <code>archiveStarted</code> and <code>archiveStopped</code> events.
* The Session object dispatches these events when an archive recording of the session starts and
* stops.
*
* @property {String} id The archive ID.
* @property {String} name The name of the archive. You can assign an archive a name when you create
* it, using the <a href="http://www.tokbox.com/opentok/api">OpenTok REST API</a> or one of the
* <a href="http://www.tokbox.com/opentok/libraries/server">OpenTok server SDKs</a>.
*
* @class ArchiveEvent
* @augments Event
*/
OT.ArchiveEvent = function (type, archive) {
OT.Event.call(this, type, false);
this.type = type;
@ -9182,6 +9229,9 @@ OTHelpers.centerElement = function(element, width, height) {
i = 0;
for (var key in this.headers) {
if(!this.headers.hasOwnProperty(key)) {
continue;
}
headerKey.push(new TextEncoder('utf-8').encode(key));
headerVal.push(new TextEncoder('utf-8').encode(this.headers[key]));
cBuf += 4;
@ -11361,6 +11411,9 @@ OTHelpers.centerElement = function(element, width, height) {
oldVideoDimensions = {};
for (var key in attributes) {
if(!attributes.hasOwnProperty(key)) {
continue;
}
// we shouldn't really read this before we know the key is valid
var oldValue = this[key];
@ -11440,7 +11493,9 @@ OTHelpers.centerElement = function(element, width, height) {
* Date object by calling <code>new Date(creationTime)</code>, where <code>creationTime</code> is
* the <code>creationTime</code> property of the Stream object.
*
* @property {Number} fps The frame rate of the video stream.
* @property {Number} frameRate The frame rate of the video stream. This property is only set if the
* publisher of the stream specifies a frame rate when calling the <code>OT.initPublisher()</code>
* method; otherwise, this property is undefined.
*
* @property {Boolean} hasAudio Whether the stream has audio. This property can change if the
* publisher turns on or off audio (by calling
@ -11671,6 +11726,9 @@ OTHelpers.centerElement = function(element, width, height) {
// Mass update, called by Raptor.Dispatcher
this._.update = function (attributes) {
for (var key in attributes) {
if(!attributes.hasOwnProperty(key)) {
continue;
}
this._.updateProperty(key, attributes[key]);
}
}.bind(this);
@ -11697,6 +11755,9 @@ OTHelpers.centerElement = function(element, width, height) {
// Mass update, called by Raptor.Dispatcher
this._.update = function (attributes) {
for (var key in attributes) {
if(!attributes.hasOwnProperty(key)) {
continue;
}
var oldValue = this[key];
this[key] = attributes[key];
@ -13609,10 +13670,13 @@ OTHelpers.centerElement = function(element, width, height) {
this.getAll = function() {
var style = OT.$.clone(_style);
for (var i in style) {
if (_COMPONENT_STYLES.indexOf(i) < 0) {
for (var key in style) {
if(!style.hasOwnProperty(key)) {
continue;
}
if (_COMPONENT_STYLES.indexOf(key) < 0) {
// Strip unnecessary properties out, should this happen on Set?
delete style[i];
delete style[key];
}
}
@ -13633,6 +13697,9 @@ OTHelpers.centerElement = function(element, width, height) {
var oldValue, newValue;
for (var key in newStyles) {
if(!newStyles.hasOwnProperty(key)) {
continue;
}
newValue = castValue(newStyles[key]);
if (isValidStyle(key, newValue)) {
@ -14107,6 +14174,8 @@ OTHelpers.centerElement = function(element, width, height) {
connectionId: _session && _session.connected ? _session.connection.connectionId : null,
partnerId: _session ? _session.apiKey : OT.APIKEY,
streamId: _stream ? _stream.id : null,
width: _container ? OT.$.width(_container.domElement) : undefined,
height: _container ? OT.$.height(_container.domElement) : undefined,
widgetId: _guid,
version: OT.properties.version,
'media_server_name': _session ? _session.sessionInfo.messagingServer : null,
@ -14138,7 +14207,9 @@ OTHelpers.centerElement = function(element, width, height) {
OT.debug('OT.Publisher.onLoaded');
_state.set('MediaBound');
_container.loading = false;
// If we have a session and we haven't created the stream yet then
// wait until that is complete before hiding the loading spinner
_container.loading = this.session ? !_stream : false;
_loaded = true;
_createChrome.call(this);
@ -14256,6 +14327,7 @@ OTHelpers.centerElement = function(element, width, height) {
},
accessDialogPrompt,
accessDialogChromeTimeout,
accessDialogFirefoxTimeout,
accessDialogWasOpened = false,
@ -14272,7 +14344,9 @@ OTHelpers.centerElement = function(element, width, height) {
function(event) {
if(!event.isDefaultPrevented()) {
if(browser.browser === 'Chrome') {
accessDialogPrompt = OT.Dialogs.AllowDeny.Chrome.initialPrompt();
accessDialogChromeTimeout = setTimeout(function() {
accessDialogPrompt = OT.Dialogs.AllowDeny.Chrome.initialPrompt();
}, 5000);
} else if(browser.browser === 'Firefox') {
accessDialogFirefoxTimeout = setTimeout(function() {
accessDialogPrompt = OT.Dialogs.AllowDeny.Firefox.maybeDenied();
@ -14286,6 +14360,11 @@ OTHelpers.centerElement = function(element, width, height) {
onAccessDialogClosed = function() {
logAnalyticsEvent('accessDialog', 'Closed', '', '');
if(accessDialogChromeTimeout) {
clearTimeout(accessDialogChromeTimeout);
accessDialogChromeTimeout = null;
}
if(accessDialogFirefoxTimeout) {
clearTimeout(accessDialogFirefoxTimeout);
accessDialogFirefoxTimeout = null;
@ -14364,6 +14443,7 @@ OTHelpers.centerElement = function(element, width, height) {
_stream.on('destroyed', this.disconnect, this);
_state.set('Publishing');
_container.loading = !_loaded;
_publishStartTime = new Date();
this.trigger('publishComplete', null, this);
@ -14559,7 +14639,7 @@ OTHelpers.centerElement = function(element, width, height) {
publishVideo : true,
mirror: true
});
if (!_publishProperties.constraints) {
_publishProperties.constraints = OT.$.clone(defaultConstraints);
if (_publishProperties.resolution) {
@ -14621,14 +14701,24 @@ OTHelpers.centerElement = function(element, width, height) {
_container = new OT.WidgetView(targetElement, _publishProperties);
_domId = _container.domId;
OT.$.getUserMedia(
_publishProperties.constraints,
onStreamAvailable.bind(this),
onStreamAvailableError.bind(this),
onAccessDialogOpened.bind(this),
onAccessDialogClosed.bind(this),
onAccessDenied.bind(this)
);
OT.$.shouldAskForDevices(function(devices) {
if(!devices.video) {
OT.warn('Setting video constraint to false, there are no video sources');
_publishProperties.constraints.video = false;
}
if(!devices.audio) {
OT.warn('Setting audio constraint to false, there are no audio sources');
_publishProperties.constraints.audio = false;
}
OT.$.getUserMedia(
_publishProperties.constraints,
onStreamAvailable.bind(this),
onStreamAvailableError.bind(this),
onAccessDialogOpened.bind(this),
onAccessDialogClosed.bind(this),
onAccessDenied.bind(this)
);
}.bind(this));
}, this);
return this;
@ -15197,6 +15287,8 @@ OTHelpers.centerElement = function(element, width, height) {
var QoSBlob = {
widget_type: 'Subscriber',
stream_type : 'WebRTC',
width: _container ? OT.$.width(_container.domElement) : undefined,
height: _container ? OT.$.height(_container.domElement) : undefined,
session_id: _session ? _session.sessionId : null,
connectionId: _session ? _session.connection.connectionId : null,
media_server_name: _session ? _session.sessionInfo.messagingServer : null,
@ -15320,6 +15412,8 @@ OTHelpers.centerElement = function(element, width, height) {
_subscribeAudioFalseWorkaround = preserver;
var streamElement = new OT.VideoElement();
// makes the incoming audio streams takes priority (will impact only FF OS for now)
streamElement.audioChannelType = 'telephony';
// Initialize the audio volume
streamElement.setAudioVolume(_audioVolume);
@ -17921,6 +18015,26 @@ OTHelpers.centerElement = function(element, width, height) {
}, true);
/**
* Dispatched when an archive recording of the session starts.
*
* @name archiveStarted
* @event
* @memberof Session
* @see ArchiveEvent
* @see <a href="http://www.tokbox.com/opentok/tutorials/archiving">Archiving overview</a>.
*/
/**
* Dispatched when an archive recording of the session stops.
*
* @name archiveStopped
* @event
* @memberof Session
* @see ArchiveEvent
* @see <a href="http://www.tokbox.com/opentok/tutorials/archiving">Archiving overview</a>.
*/
/**
* A new client, other than your own, has connected to the session.
* @name connectionCreated

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

@ -56,18 +56,18 @@ browser.jar:
# Partner SDK assets
content/browser/loop/libs/sdk.js (content/libs/sdk.js)
content/browser/loop/otcdn/webrtc/v2.2.5/css/ot.min.css (content/libs/otcdn/webrtc/v2.2.5/css/ot.min.css)
content/browser/loop/otcdn/webrtc/v2.2.5/js/dynamic_config.min.js (content/libs/otcdn/webrtc/v2.2.5/js/dynamic_config.min.js)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/access-denied-chrome.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-denied-chrome.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/access-denied-copy-firefox.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-denied-copy-firefox.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/access-denied-firefox.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-denied-firefox.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/access-predenied-chrome.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-predenied-chrome.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/access-prompt-chrome.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/access-prompt-chrome.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/audioonly-publisher.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/audioonly-publisher.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/audioonly-subscriber.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/audioonly-subscriber.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/buttons.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/buttons.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/loader.gif (content/libs/otcdn/webrtc/v2.2.5/images/rtc/loader.gif)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/mic-off.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/mic-off.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/mic-on.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/mic-on.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/speaker-off.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/speaker-off.png)
content/browser/loop/otcdn/webrtc/v2.2.5/images/rtc/speaker-on.png (content/libs/otcdn/webrtc/v2.2.5/images/rtc/speaker-on.png)
content/browser/loop/sdk-content/css/ot.css (content/libs/sdk-content/css/ot.css)
content/browser/loop/sdk-content/js/dynamic_config.min.js (content/libs/sdk-content/js/dynamic_config.min.js)
content/browser/loop/sdk-content/images/rtc/access-denied-chrome.png (content/libs/sdk-content/images/rtc/access-denied-chrome.png)
content/browser/loop/sdk-content/images/rtc/access-denied-copy-firefox.png (content/libs/sdk-content/images/rtc/access-denied-copy-firefox.png)
content/browser/loop/sdk-content/images/rtc/access-denied-firefox.png (content/libs/sdk-content/images/rtc/access-denied-firefox.png)
content/browser/loop/sdk-content/images/rtc/access-predenied-chrome.png (content/libs/sdk-content/images/rtc/access-predenied-chrome.png)
content/browser/loop/sdk-content/images/rtc/access-prompt-chrome.png (content/libs/sdk-content/images/rtc/access-prompt-chrome.png)
content/browser/loop/sdk-content/images/rtc/audioonly-publisher.png (content/libs/sdk-content/images/rtc/audioonly-publisher.png)
content/browser/loop/sdk-content/images/rtc/audioonly-subscriber.png (content/libs/sdk-content/images/rtc/audioonly-subscriber.png)
content/browser/loop/sdk-content/images/rtc/buttons.png (content/libs/sdk-content/images/rtc/buttons.png)
content/browser/loop/sdk-content/images/rtc/loader.gif (content/libs/sdk-content/images/rtc/loader.gif)
content/browser/loop/sdk-content/images/rtc/mic-off.png (content/libs/sdk-content/images/rtc/mic-off.png)
content/browser/loop/sdk-content/images/rtc/mic-on.png (content/libs/sdk-content/images/rtc/mic-on.png)
content/browser/loop/sdk-content/images/rtc/speaker-off.png (content/libs/sdk-content/images/rtc/speaker-off.png)
content/browser/loop/sdk-content/images/rtc/speaker-on.png (content/libs/sdk-content/images/rtc/speaker-on.png)

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

@ -6814,6 +6814,11 @@ elif test "$GNU_CC"; then
MOZ_CXX_SUPPORTS_WARNING(-W, no-error=maybe-uninitialized, ac_cxx_has_noerror_maybe_uninitialized)
MOZ_C_SUPPORTS_WARNING(-W, no-error=deprecated-declarations, ac_c_has_noerror_deprecated_declarations)
MOZ_CXX_SUPPORTS_WARNING(-W, no-error=deprecated-declarations, ac_cxx_has_noerror_deprecated_declarations)
if test -n "$MOZ_PGO"; then
MOZ_C_SUPPORTS_WARNING(-W, no-error=coverage-mismatch, ac_c_has_noerror_coverage_mismatch)
MOZ_CXX_SUPPORTS_WARNING(-W, no-error=coverage-mismatch, ac_cxx_has_noerror_coverage_mismatch)
fi
fi
dnl ========================================================

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

@ -2149,6 +2149,24 @@ public:
*/
static bool IsContentInsertionPoint(const nsIContent* aContent);
/**
* Returns whether a given header is forbidden for an XHR or fetch
* request.
*/
static bool IsForbiddenRequestHeader(const nsACString& aHeader);
/**
* Returns whether a given header is forbidden for a system XHR
* request.
*/
static bool IsForbiddenSystemRequestHeader(const nsACString& aHeader);
/**
* Returns whether a given header is forbidden for an XHR or fetch
* response.
*/
static bool IsForbiddenResponseHeader(const nsACString& aHeader);
private:
static bool InitializeEventTable();

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

@ -132,7 +132,6 @@ private:
Element* aFrom, Element* aTo)
: Notification(aTarget), mFrom(aFrom), mTo(aTo)
{}
virtual ~ChangeNotification() {}
NS_DECL_ISUPPORTS_INHERITED
NS_IMETHOD Run() MOZ_OVERRIDE {
@ -148,6 +147,8 @@ private:
Notification::Clear(); mFrom = nullptr; mTo = nullptr;
}
protected:
virtual ~ChangeNotification() {}
nsRefPtr<Element> mFrom;
nsRefPtr<Element> mTo;
};

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

@ -23,6 +23,8 @@ private:
"Bad NodeType in aNodeInfo");
}
virtual ~Comment();
public:
Comment(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)
: nsGenericDOMDataNode(aNodeInfo)
@ -36,8 +38,6 @@ public:
Init();
}
virtual ~Comment();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED

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

@ -138,6 +138,8 @@ public:
}
protected:
virtual ~QuadBounds() {}
nsRefPtr<DOMQuad> mQuad;
};

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

@ -209,6 +209,13 @@ protected:
};
}
template<>
struct HasDangerousPublicDestructor<dom::DOMRect>
{
static const bool value = true;
};
}
#endif /*MOZILLA_DOMRECT_H_*/

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

@ -66,10 +66,6 @@ public:
Init();
}
virtual ~DocumentFragment()
{
}
virtual JSObject* WrapNode(JSContext *aCx) MOZ_OVERRIDE;
// nsIContent
@ -140,6 +136,10 @@ public:
#endif
protected:
virtual ~DocumentFragment()
{
}
nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
nsIContent* mHost; // Weak
};

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

@ -46,8 +46,6 @@ public:
const nsAString& aSystemId,
const nsAString& aInternalSubset);
virtual ~DocumentType();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -77,6 +75,8 @@ public:
virtual nsIDOMNode* AsDOMNode() MOZ_OVERRIDE { return this; }
protected:
virtual ~DocumentType();
virtual JSObject* WrapNode(JSContext *cx) MOZ_OVERRIDE;
nsString mPublicId;

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

@ -47,7 +47,6 @@ friend class AsyncVerifyRedirectCallbackFwr;
public:
EventSource(nsPIDOMWindow* aOwnerWindow);
virtual ~EventSource();
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_INHERITED(
EventSource, DOMEventTargetHelper)
@ -102,6 +101,8 @@ public:
virtual void DisconnectFromOwner() MOZ_OVERRIDE;
protected:
virtual ~EventSource();
nsresult Init(nsISupports* aOwner,
const nsAString& aURL,
bool aWithCredentials);

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

@ -53,6 +53,9 @@ FileIOObject::FileIOObject()
mTotal(0), mTransferred(0)
{}
FileIOObject::~FileIOObject()
{}
void
FileIOObject::StartProgressEventTimer()
{

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

@ -65,6 +65,8 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(FileIOObject, DOMEventTargetHelper)
protected:
virtual ~FileIOObject();
// Implemented by the derived class to do whatever it needs to do for abort
virtual void DoAbort(nsAString& aEvent) = 0;

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

@ -33,7 +33,6 @@ public:
NodeIterator(nsINode *aRoot,
uint32_t aWhatToShow,
const NodeFilterHolder &aFilter);
virtual ~NodeIterator();
NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED
@ -73,6 +72,8 @@ public:
JSObject* WrapObject(JSContext *cx);
private:
virtual ~NodeIterator();
struct NodePointer {
NodePointer() : mNode(nullptr) {}
NodePointer(nsINode *aNode, bool aBeforeNode);
@ -116,12 +117,6 @@ private:
} // namespace dom
template<>
struct HasDangerousPublicDestructor<dom::NodeIterator>
{
static const bool value = true;
};
} // namespace mozilla
#endif // mozilla_dom_NodeIterator_h

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

@ -44,7 +44,6 @@ public:
ShadowRoot(nsIContent* aContent, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,
nsXBLPrototypeBinding* aProtoBinding);
virtual ~ShadowRoot();
void AddToIdTable(Element* aElement, nsIAtom* aId);
void RemoveFromIdTable(Element* aElement, nsIAtom* aId);
@ -128,6 +127,7 @@ public:
void SetInnerHTML(const nsAString& aInnerHTML, ErrorResult& aError);
void StyleSheetChanged();
protected:
virtual ~ShadowRoot();
// The pool host is the parent of the nodes that will be distributed
// into the insertion points in this ShadowRoot. See |ChangeShadowRoot|.
@ -176,7 +176,6 @@ class ShadowRootStyleSheetList : public StyleSheetList
{
public:
ShadowRootStyleSheetList(ShadowRoot* aShadowRoot);
virtual ~ShadowRootStyleSheetList();
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ShadowRootStyleSheetList, StyleSheetList)
@ -190,6 +189,8 @@ public:
virtual CSSStyleSheet* IndexedGetter(uint32_t aIndex, bool& aFound) MOZ_OVERRIDE;
protected:
virtual ~ShadowRootStyleSheetList();
nsRefPtr<ShadowRoot> mShadowRoot;
};

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

@ -1107,7 +1107,6 @@ class nsContentSubtreeIterator : public nsContentIterator
{
public:
nsContentSubtreeIterator() : nsContentIterator(false) {}
virtual ~nsContentSubtreeIterator() {}
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsContentSubtreeIterator, nsContentIterator)
@ -1131,6 +1130,7 @@ public:
virtual void Last();
protected:
virtual ~nsContentSubtreeIterator() {}
// Returns the highest inclusive ancestor of aNode that's in the range
// (possibly aNode itself). Returns null if aNode is null, or is not itself

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

@ -131,6 +131,9 @@ public:
}
virtual JSObject* WrapObject(JSContext *cx) MOZ_OVERRIDE;
protected:
virtual ~nsSimpleContentList() {}
private:
// This has to be a strong reference, the root might go away before the list.
nsCOMPtr<nsINode> mRoot;
@ -249,12 +252,13 @@ public:
nsIAtom* aMatchAtom = nullptr,
int32_t aMatchNameSpaceId = kNameSpaceID_None,
bool aFuncMayDependOnAttr = true);
virtual ~nsContentList();
// nsWrapperCache
using nsWrapperCache::GetWrapperPreserveColor;
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
protected:
virtual ~nsContentList();
virtual JSObject* GetWrapperPreserveColorInternal() MOZ_OVERRIDE
{
return nsWrapperCache::GetWrapperPreserveColor();

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

@ -6806,6 +6806,47 @@ nsContentUtils::IsContentInsertionPoint(const nsIContent* aContent)
return false;
}
// static
bool
nsContentUtils::IsForbiddenRequestHeader(const nsACString& aHeader)
{
if (IsForbiddenSystemRequestHeader(aHeader)) {
return true;
}
return StringBeginsWith(aHeader, NS_LITERAL_CSTRING("proxy-"),
nsCaseInsensitiveCStringComparator()) ||
StringBeginsWith(aHeader, NS_LITERAL_CSTRING("sec-"),
nsCaseInsensitiveCStringComparator());
}
// static
bool
nsContentUtils::IsForbiddenSystemRequestHeader(const nsACString& aHeader)
{
static const char *kInvalidHeaders[] = {
"accept-charset", "accept-encoding", "access-control-request-headers",
"access-control-request-method", "connection", "content-length",
"cookie", "cookie2", "content-transfer-encoding", "date", "dnt",
"expect", "host", "keep-alive", "origin", "referer", "te", "trailer",
"transfer-encoding", "upgrade", "user-agent", "via"
};
for (uint32_t i = 0; i < ArrayLength(kInvalidHeaders); ++i) {
if (aHeader.LowerCaseEqualsASCII(kInvalidHeaders[i])) {
return true;
}
}
return false;
}
// static
bool
nsContentUtils::IsForbiddenResponseHeader(const nsACString& aHeader)
{
return (aHeader.LowerCaseEqualsASCII("set-cookie") ||
aHeader.LowerCaseEqualsASCII("set-cookie2"));
}
bool
nsContentUtils::DOMWindowDumpEnabled()
{

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

@ -453,6 +453,10 @@ nsCORSListenerProxy::nsCORSListenerProxy(nsIStreamListener* aOuter,
mPreflightHeaders.Sort();
}
nsCORSListenerProxy::~nsCORSListenerProxy()
{
}
nsresult
nsCORSListenerProxy::Init(nsIChannel* aChannel, bool aAllowDataURI)
{

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

@ -62,7 +62,7 @@ public:
nsresult Init(nsIChannel* aChannel, bool aAllowDataURI = false);
private:
~nsCORSListenerProxy() {}
~nsCORSListenerProxy();
nsresult UpdateChannel(nsIChannel* aChannel, bool aAllowDataURI = false);
nsresult CheckRequestApproved(nsIRequest* aRequest);

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

@ -108,6 +108,8 @@ public:
virtual nsresult GetMozFullPathInternal(nsAString& aFullPath) MOZ_OVERRIDE;
protected:
virtual ~DOMMultipartFileImpl() {}
nsresult ParseBlobArrayArgument(JSContext* aCx, JS::Value& aValue,
bool aNativeEOL, UnwrapFuncPtr aUnwrapFunc);

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

@ -27,7 +27,6 @@ class nsDOMDataChannel : public mozilla::DOMEventTargetHelper,
public:
nsDOMDataChannel(already_AddRefed<mozilla::DataChannel>& aDataChannel,
nsPIDOMWindow* aWindow);
~nsDOMDataChannel();
nsresult Init(nsPIDOMWindow* aDOMWindow);
@ -97,6 +96,9 @@ public:
virtual void
AppReady();
protected:
~nsDOMDataChannel();
private:
void Send(nsIInputStream* aMsgStream, const nsACString& aMsgString,
uint32_t aMsgLength, bool aIsBinary, mozilla::ErrorResult& aRv);

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

@ -35,7 +35,6 @@ class nsDOMFileReader : public mozilla::dom::FileIOObject,
typedef mozilla::dom::GlobalObject GlobalObject;
public:
nsDOMFileReader();
virtual ~nsDOMFileReader();
NS_DECL_ISUPPORTS_INHERITED
@ -114,6 +113,8 @@ public:
void RootResultArrayBuffer();
protected:
virtual ~nsDOMFileReader();
enum eDataFormat {
FILE_AS_ARRAYBUFFER,
FILE_AS_BINARY,

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

@ -11326,8 +11326,6 @@ public:
mDocument(do_GetWeakReference(aElement->OwnerDoc())),
mUserInputOrChromeCaller(aUserInputOrChromeCaller) {}
virtual ~nsPointerLockPermissionRequest() {}
NS_DECL_ISUPPORTS
NS_DECL_NSICONTENTPERMISSIONREQUEST
@ -11387,6 +11385,9 @@ public:
nsWeakPtr mElement;
nsWeakPtr mDocument;
bool mUserInputOrChromeCaller;
protected:
virtual ~nsPointerLockPermissionRequest() {}
};
NS_IMPL_ISUPPORTS_INHERITED(nsPointerLockPermissionRequest,

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

@ -441,7 +441,6 @@ class nsDOMStyleSheetList : public mozilla::dom::StyleSheetList,
{
public:
nsDOMStyleSheetList(nsIDocument *aDocument);
virtual ~nsDOMStyleSheetList();
NS_DECL_ISUPPORTS_INHERITED
@ -462,6 +461,8 @@ public:
IndexedGetter(uint32_t aIndex, bool& aFound) MOZ_OVERRIDE;
protected:
virtual ~nsDOMStyleSheetList();
int32_t mLength;
nsIDocument* mDocument;
};

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

@ -2056,6 +2056,7 @@ GK_ATOM(RemoteId, "_remote_id")
GK_ATOM(DisplayPort, "_displayport")
GK_ATOM(DisplayPortMargins, "_displayportmargins")
GK_ATOM(DisplayPortBase, "_displayportbase")
GK_ATOM(AsyncScrollLayerCreationFailed, "_asyncscrolllayercreationfailed")
// Names for system metrics
GK_ATOM(color_picker_available, "color-picker-available")

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

@ -25,7 +25,6 @@ public:
nsHostObjectURI(nsIPrincipal* aPrincipal) :
nsSimpleURI(), mPrincipal(aPrincipal)
{}
virtual ~nsHostObjectURI() {}
// For use only from deserialization
nsHostObjectURI() : nsSimpleURI() {}
@ -47,6 +46,9 @@ public:
{ return new nsHostObjectURI(); }
nsCOMPtr<nsIPrincipal> mPrincipal;
protected:
virtual ~nsHostObjectURI() {}
};
#define NS_HOSTOBJECTURI_CID \

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

@ -38,7 +38,6 @@ class nsInProcessTabChildGlobal : public mozilla::DOMEventTargetHelper,
public:
nsInProcessTabChildGlobal(nsIDocShell* aShell, nsIContent* aOwner,
nsFrameMessageManager* aChrome);
virtual ~nsInProcessTabChildGlobal();
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsInProcessTabChildGlobal,
mozilla::DOMEventTargetHelper)
@ -155,6 +154,8 @@ public:
return mGlobal->GetJSObject();
}
protected:
virtual ~nsInProcessTabChildGlobal();
nsresult Init();
nsresult InitTabChildGlobal();
nsCOMPtr<nsIContentFrameMessageManager> mMessageManager;

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

@ -390,6 +390,9 @@ public:
// nsITimerCallback
NS_IMETHOD Notify(nsITimer *timer);
protected:
virtual ~nsStopPluginRunnable() {}
private:
nsCOMPtr<nsITimer> mTimer;
nsRefPtr<nsPluginInstanceOwner> mInstanceOwner;
@ -2450,7 +2453,7 @@ nsObjectLoadingContent::UnloadObject(bool aResetState)
mScriptRequested = false;
if (!mInstanceOwner) {
if (mIsStopping) {
// The protochain is normally thrown out after a plugin stops, but if we
// re-enter while stopping a plugin and try to load something new, we need
// to throw away the old protochain in the nested unload.

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

@ -45,10 +45,6 @@ public:
NS_ASSERTION(mAttrName, "Must have attr name");
}
virtual ~nsAttributeTextNode() {
NS_ASSERTION(!mGrandparent, "We were not unbound!");
}
virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
nsIContent* aBindingParent,
bool aCompileEventHandlers);
@ -79,6 +75,10 @@ public:
}
private:
virtual ~nsAttributeTextNode() {
NS_ASSERTION(!mGrandparent, "We were not unbound!");
}
// Update our text to our parent's current attr value
void UpdateText(bool aNotify);

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

@ -43,8 +43,6 @@ public:
Init();
}
virtual ~nsTextNode();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -81,6 +79,8 @@ public:
#endif
protected:
virtual ~nsTextNode();
virtual JSObject* WrapNode(JSContext *aCx) MOZ_OVERRIDE;
};

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

@ -1254,9 +1254,7 @@ bool
nsXMLHttpRequest::IsSafeHeader(const nsACString& header, nsIHttpChannel* httpChannel)
{
// See bug #380418. Hide "Set-Cookie" headers from non-chrome scripts.
if (!IsSystemXHR() &&
(header.LowerCaseEqualsASCII("set-cookie") ||
header.LowerCaseEqualsASCII("set-cookie2"))) {
if (!IsSystemXHR() && nsContentUtils::IsForbiddenResponseHeader(header)) {
NS_WARNING("blocked access to response header");
return false;
}
@ -3121,34 +3119,11 @@ nsXMLHttpRequest::SetRequestHeader(const nsACString& header,
// content to override default headers the first time they set them.
bool mergeHeaders = true;
// Prevent modification to certain HTTP headers (see bug 302263), unless
// the executing script is privileged.
bool isInvalidHeader = false;
static const char *kInvalidHeaders[] = {
"accept-charset", "accept-encoding", "access-control-request-headers",
"access-control-request-method", "connection", "content-length",
"cookie", "cookie2", "content-transfer-encoding", "date", "dnt",
"expect", "host", "keep-alive", "origin", "referer", "te", "trailer",
"transfer-encoding", "upgrade", "user-agent", "via"
};
uint32_t i;
for (i = 0; i < ArrayLength(kInvalidHeaders); ++i) {
if (header.LowerCaseEqualsASCII(kInvalidHeaders[i])) {
isInvalidHeader = true;
break;
}
}
if (!IsSystemXHR()) {
// Step 5: Check for dangerous headers.
if (isInvalidHeader) {
NS_WARNING("refusing to set request header");
return NS_OK;
}
if (StringBeginsWith(header, NS_LITERAL_CSTRING("proxy-"),
nsCaseInsensitiveCStringComparator()) ||
StringBeginsWith(header, NS_LITERAL_CSTRING("sec-"),
nsCaseInsensitiveCStringComparator())) {
// Prevent modification to certain HTTP headers (see bug 302263), unless
// the executing script is privileged.
if (nsContentUtils::IsForbiddenRequestHeader(header)) {
NS_WARNING("refusing to set request header");
return NS_OK;
}
@ -3161,7 +3136,7 @@ nsXMLHttpRequest::SetRequestHeader(const nsACString& header,
"accept", "accept-language", "content-language", "content-type",
"last-event-id"
};
for (i = 0; i < ArrayLength(kCrossOriginSafeHeaders); ++i) {
for (uint32_t i = 0; i < ArrayLength(kCrossOriginSafeHeaders); ++i) {
if (header.LowerCaseEqualsASCII(kCrossOriginSafeHeaders[i])) {
safeHeader = true;
break;
@ -3176,7 +3151,7 @@ nsXMLHttpRequest::SetRequestHeader(const nsACString& header,
}
} else {
// Case 1 above
if (isInvalidHeader) {
if (nsContentUtils::IsForbiddenSystemRequestHeader(header)) {
mergeHeaders = false;
}
}

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

@ -122,13 +122,14 @@ protected:
{
}
virtual ~nsXHREventTarget() {}
public:
typedef mozilla::dom::XMLHttpRequestResponseType
XMLHttpRequestResponseType;
typedef mozilla::ErrorResult
ErrorResult;
virtual ~nsXHREventTarget() {}
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsXHREventTarget,
mozilla::DOMEventTargetHelper)
@ -170,6 +171,9 @@ public:
{
return mListenerManager && mListenerManager->HasListeners();
}
private:
virtual ~nsXMLHttpRequestUpload() {}
};
class nsXMLHttpRequestXPCOMifier;
@ -192,7 +196,6 @@ class nsXMLHttpRequest : public nsXHREventTarget,
public:
nsXMLHttpRequest();
virtual ~nsXMLHttpRequest();
virtual JSObject* WrapObject(JSContext *cx) MOZ_OVERRIDE
{
@ -332,6 +335,8 @@ public:
nsXMLHttpRequestUpload* Upload();
private:
virtual ~nsXMLHttpRequest();
class RequestBody
{
public:

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

@ -15,6 +15,7 @@
#include "WebGLVertexArray.h"
#include "WebGLQuery.h"
#include "GLBlitHelper.h"
#include "AccessCheck.h"
#include "nsIConsoleService.h"
#include "nsServiceManagerUtils.h"
@ -28,6 +29,7 @@
#include "nsIVariant.h"
#include "ImageEncoder.h"
#include "ImageContainer.h"
#include "gfxContext.h"
#include "gfxPattern.h"
@ -57,6 +59,7 @@
#include "mozilla/Services.h"
#include "mozilla/dom/WebGLRenderingContextBinding.h"
#include "mozilla/dom/BindingUtils.h"
#include "mozilla/dom/HTMLVideoElement.h"
#include "mozilla/dom/ImageData.h"
#include "mozilla/ProcessPriorityManager.h"
#include "mozilla/EnumeratedArrayCycleCollection.h"
@ -1523,6 +1526,65 @@ WebGLContext::GetSurfaceSnapshot(bool* aPremultAlpha)
return dt->Snapshot();
}
bool WebGLContext::TexImageFromVideoElement(GLenum target, GLint level,
GLenum internalformat, GLenum format, GLenum type,
mozilla::dom::Element& elt)
{
HTMLVideoElement* video = HTMLVideoElement::FromContentOrNull(&elt);
if (!video) {
return false;
}
uint16_t readyState;
if (NS_SUCCEEDED(video->GetReadyState(&readyState)) &&
readyState < nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA)
{
//No frame inside, just return
return false;
}
// If it doesn't have a principal, just bail
nsCOMPtr<nsIPrincipal> principal = video->GetCurrentPrincipal();
if (!principal) {
return false;
}
mozilla::layers::ImageContainer* container = video->GetImageContainer();
if (!container) {
return false;
}
if (video->GetCORSMode() == CORS_NONE) {
bool subsumes;
nsresult rv = mCanvasElement->NodePrincipal()->Subsumes(principal, &subsumes);
if (NS_FAILED(rv) || !subsumes) {
GenerateWarning("It is forbidden to load a WebGL texture from a cross-domain element that has not been validated with CORS. "
"See https://developer.mozilla.org/en/WebGL/Cross-Domain_Textures");
return false;
}
}
gl->MakeCurrent();
nsRefPtr<mozilla::layers::Image> srcImage = container->LockCurrentImage();
WebGLTexture* tex = activeBoundTextureForTarget(target);
const WebGLTexture::ImageInfo& info = tex->ImageInfoAt(target, 0);
bool dimensionsMatch = info.Width() == srcImage->GetSize().width &&
info.Height() == srcImage->GetSize().height;
if (!dimensionsMatch) {
// we need to allocation
gl->fTexImage2D(target, level, internalformat, srcImage->GetSize().width, srcImage->GetSize().height, 0, format, type, nullptr);
}
bool ok = gl->BlitHelper()->BlitImageToTexture(srcImage.get(), srcImage->GetSize(), tex->GLName(), target, mPixelStoreFlipY);
if (ok) {
tex->SetImageInfo(target, level, srcImage->GetSize().width, srcImage->GetSize().height, format, type, WebGLImageDataStatus::InitializedImageData);
tex->Bind(target);
}
srcImage = nullptr;
container->UnlockCurrentImage();
return ok;
}
//
// XPCOM goop
//

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

@ -7,6 +7,11 @@
#define WEBGLCONTEXT_H_
#include "mozilla/Attributes.h"
#include "mozilla/CheckedInt.h"
#include "mozilla/EnumeratedArray.h"
#include "mozilla/LinkedList.h"
#include "mozilla/UniquePtr.h"
#include "GLDefs.h"
#include "WebGLActiveInfo.h"
#include "WebGLObjectModel.h"
@ -26,10 +31,6 @@
#include "GLContextProvider.h"
#include "mozilla/EnumeratedArray.h"
#include "mozilla/LinkedList.h"
#include "mozilla/CheckedInt.h"
#include "mozilla/Scoped.h"
#include "mozilla/gfx/2D.h"
#ifdef XP_MACOSX
@ -79,6 +80,7 @@ class WebGLVertexArray;
namespace dom {
class ImageData;
class Element;
struct WebGLContextAttributes;
template<typename> struct Nullable;
@ -459,6 +461,10 @@ public:
dom::ImageData* pixels, ErrorResult& rv);
// Allow whatever element types the bindings are willing to pass
// us in TexImage2D
bool TexImageFromVideoElement(GLenum target, GLint level,
GLenum internalformat, GLenum format, GLenum type,
mozilla::dom::Element& image);
template<class ElementType>
void TexImage2D(GLenum target, GLint level,
GLenum internalformat, GLenum format, GLenum type,
@ -466,6 +472,17 @@ public:
{
if (IsContextLost())
return;
WebGLTexture* tex = activeBoundTextureForTarget(target);
if (!tex)
return ErrorInvalidOperation("no texture is bound to this target");
// Trying to handle the video by GPU directly first
if (TexImageFromVideoElement(target, level, internalformat, format, type, elt)) {
return;
}
RefPtr<gfx::DataSourceSurface> data;
WebGLTexelFormat srcFormat;
nsLayoutUtils::SurfaceFromElementResult res = SurfaceFromElement(elt);
@ -481,6 +498,7 @@ public:
0, format, type, data->GetData(), byteLength,
-1, srcFormat, mPixelStorePremultiplyAlpha);
}
void TexParameterf(GLenum target, GLenum pname, GLfloat param) {
TexParameter_base(target, pname, nullptr, &param);
}
@ -506,6 +524,12 @@ public:
{
if (IsContextLost())
return;
// Trying to handle the video by GPU directly first
if (TexImageFromVideoElement(target, level, format, format, type, elt)) {
return;
}
RefPtr<gfx::DataSourceSurface> data;
WebGLTexelFormat srcFormat;
nsLayoutUtils::SurfaceFromElementResult res = SurfaceFromElement(elt);
@ -1207,16 +1231,16 @@ protected:
GLuint GLName() const { return mGLName; }
};
ScopedDeletePtr<FakeBlackTexture> mBlackOpaqueTexture2D,
mBlackOpaqueTextureCubeMap,
mBlackTransparentTexture2D,
mBlackTransparentTextureCubeMap;
UniquePtr<FakeBlackTexture> mBlackOpaqueTexture2D,
mBlackOpaqueTextureCubeMap,
mBlackTransparentTexture2D,
mBlackTransparentTextureCubeMap;
void BindFakeBlackTexturesHelper(
GLenum target,
const nsTArray<WebGLRefPtr<WebGLTexture> >& boundTexturesArray,
ScopedDeletePtr<FakeBlackTexture> & opaqueTextureScopedPtr,
ScopedDeletePtr<FakeBlackTexture> & transparentTextureScopedPtr);
UniquePtr<FakeBlackTexture> & opaqueTextureScopedPtr,
UniquePtr<FakeBlackTexture> & transparentTextureScopedPtr);
GLfloat mVertexAttrib0Vector[4];
GLfloat mFakeVertexAttrib0BufferObjectVector[4];

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

@ -627,8 +627,8 @@ void
WebGLContext::BindFakeBlackTexturesHelper(
GLenum target,
const nsTArray<WebGLRefPtr<WebGLTexture> > & boundTexturesArray,
ScopedDeletePtr<FakeBlackTexture> & opaqueTextureScopedPtr,
ScopedDeletePtr<FakeBlackTexture> & transparentTextureScopedPtr)
UniquePtr<FakeBlackTexture> & opaqueTextureScopedPtr,
UniquePtr<FakeBlackTexture> & transparentTextureScopedPtr)
{
for (int32_t i = 0; i < mGLMaxTextureUnits; ++i) {
if (!boundTexturesArray[i]) {
@ -644,15 +644,14 @@ WebGLContext::BindFakeBlackTexturesHelper(
bool alpha = s == WebGLTextureFakeBlackStatus::UninitializedImageData &&
FormatHasAlpha(boundTexturesArray[i]->ImageInfoBase().WebGLFormat());
ScopedDeletePtr<FakeBlackTexture>&
UniquePtr<FakeBlackTexture>&
blackTexturePtr = alpha
? transparentTextureScopedPtr
: opaqueTextureScopedPtr;
if (!blackTexturePtr) {
GLenum format = alpha ? LOCAL_GL_RGBA : LOCAL_GL_RGB;
blackTexturePtr
= new FakeBlackTexture(gl, target, format);
blackTexturePtr = MakeUnique<FakeBlackTexture>(gl, target, format);
}
gl->fActiveTexture(LOCAL_GL_TEXTURE0 + i);

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

@ -22,7 +22,6 @@ class HTMLAudioElement MOZ_FINAL : public HTMLMediaElement,
{
public:
HTMLAudioElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
virtual ~HTMLAudioElement();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -43,6 +42,8 @@ public:
const Optional<nsAString>& aSrc, ErrorResult& aRv);
protected:
virtual ~HTMLAudioElement();
virtual JSObject* WrapNode(JSContext* aCx) MOZ_OVERRIDE;
};

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

@ -48,7 +48,6 @@ class HTMLCanvasElement MOZ_FINAL : public nsGenericHTMLElement,
public:
HTMLCanvasElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
virtual ~HTMLCanvasElement();
NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLCanvasElement, canvas)
@ -208,6 +207,8 @@ public:
nsresult GetContext(const nsAString& aContextId, nsISupports** aContext);
protected:
virtual ~HTMLCanvasElement();
virtual JSObject* WrapNode(JSContext* aCx) MOZ_OVERRIDE;
nsIntSize GetWidthHeight();

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

@ -90,7 +90,6 @@ public:
}
HTMLMediaElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
virtual ~HTMLMediaElement();
/**
* This is used when the browser is constructing a video element to play
@ -597,6 +596,8 @@ public:
}
protected:
virtual ~HTMLMediaElement();
class MediaLoadListener;
class StreamListener;

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

@ -22,7 +22,6 @@ class HTMLVideoElement MOZ_FINAL : public HTMLMediaElement,
{
public:
HTMLVideoElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
virtual ~HTMLVideoElement();
NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLVideoElement, video)
@ -109,6 +108,8 @@ public:
already_AddRefed<VideoPlaybackQuality> GetVideoPlaybackQuality();
protected:
virtual ~HTMLVideoElement();
virtual JSObject* WrapNode(JSContext* aCx) MOZ_OVERRIDE;
virtual void WakeLockCreate();

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

@ -31,7 +31,6 @@ public:
, Link(MOZ_THIS_IN_INITIALIZER_LIST())
{
}
virtual ~HTMLAnchorElement();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -199,6 +198,8 @@ public:
}
protected:
virtual ~HTMLAnchorElement();
virtual void GetItemValueText(nsAString& text) MOZ_OVERRIDE;
virtual void SetItemValueText(const nsAString& text) MOZ_OVERRIDE;
virtual JSObject* WrapNode(JSContext *aCx) MOZ_OVERRIDE;

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

@ -28,7 +28,6 @@ class HTMLAreaElement MOZ_FINAL : public nsGenericHTMLElement,
{
public:
HTMLAreaElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
virtual ~HTMLAreaElement();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -173,6 +172,8 @@ public:
}
protected:
virtual ~HTMLAreaElement();
virtual JSObject* WrapNode(JSContext* aCx) MOZ_OVERRIDE;
virtual void GetItemValueText(nsAString& text) MOZ_OVERRIDE;

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

@ -19,7 +19,6 @@ class HTMLBRElement MOZ_FINAL : public nsGenericHTMLElement,
{
public:
HTMLBRElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
virtual ~HTMLBRElement();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -47,6 +46,8 @@ public:
virtual JSObject* WrapNode(JSContext *aCx) MOZ_OVERRIDE;
private:
virtual ~HTMLBRElement();
static void MapAttributesIntoRule(const nsMappedAttributes* aAttributes,
nsRuleData* aData);
};

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

@ -45,7 +45,6 @@ public:
: nsGenericHTMLElement(aNodeInfo)
{
}
virtual ~HTMLBodyElement();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -133,6 +132,8 @@ public:
virtual bool IsEventAttributeName(nsIAtom* aName) MOZ_OVERRIDE;
protected:
virtual ~HTMLBodyElement();
virtual JSObject* WrapNode(JSContext *aCx) MOZ_OVERRIDE;
nsRefPtr<BodyRule> mContentStyleRule;

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

@ -25,7 +25,6 @@ public:
HTMLButtonElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo,
FromParser aFromParser = NOT_FROM_PARSER);
virtual ~HTMLButtonElement();
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLButtonElement,
nsGenericHTMLFormElementWithState)
@ -162,6 +161,8 @@ public:
// nsIConstraintValidation::SetCustomValidity() is fine.
protected:
virtual ~HTMLButtonElement();
uint8_t mType;
bool mDisabledChanged;
bool mInInternalActivate;

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

@ -20,7 +20,6 @@ class HTMLContentElement MOZ_FINAL : public nsGenericHTMLElement
{
public:
HTMLContentElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
virtual ~HTMLContentElement();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -70,6 +69,8 @@ public:
}
protected:
virtual ~HTMLContentElement();
virtual JSObject* WrapNode(JSContext *aCx) MOZ_OVERRIDE;
/**

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

@ -18,7 +18,6 @@ class HTMLDataElement MOZ_FINAL : public nsGenericHTMLElement
{
public:
HTMLDataElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
virtual ~HTMLDataElement();
// HTMLDataElement WebIDL
void GetValue(nsAString& aValue)
@ -36,6 +35,8 @@ public:
virtual nsresult Clone(mozilla::dom::NodeInfo* aNodeInfo, nsINode** aResult) const MOZ_OVERRIDE;
protected:
virtual ~HTMLDataElement();
virtual JSObject* WrapNode(JSContext* aCx) MOZ_OVERRIDE;
};

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

@ -19,7 +19,6 @@ public:
: nsGenericHTMLElement(aNodeInfo)
{
}
virtual ~HTMLDataListElement();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
@ -43,6 +42,8 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLDataListElement,
nsGenericHTMLElement)
protected:
virtual ~HTMLDataListElement();
virtual JSObject* WrapNode(JSContext *aCx) MOZ_OVERRIDE;
// <option>'s list inside the datalist element.

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше