Bug 1046420 - Part 1: Make MozSelfSupport a Window property instead of a global property. r=bz,wchen

This commit is contained in:
Birunthan Mohanathas 2014-08-26 07:11:15 -07:00
Родитель 2f94456fa7
Коммит 775a16fc82
6 изменённых файлов: 36 добавлений и 11 удалений

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

@ -27,18 +27,12 @@ MozSelfSupportInterface.prototype = {
classDescription: "MozSelfSupport",
classID: Components.ID("{d30aae8b-f352-4de3-b936-bb9d875df0bb}"),
contractID: "@mozilla.org/mozselfsupport;1",
QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer,
Ci.nsIObserver]),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer]),
_window: null,
init: function (window) {
this._window = window;
// FIXME: Remove this hack after static attributes work for JS-implemented
// WebIDL (see bug 863952). For a detailed description of how this works,
// see the comment accompanying the init function of amInstallTrigger.js.
return window.MozSelfSupportImpl._create(this._window, this);
},
get healthReportDataSubmissionEnabled() {

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

@ -1,4 +1,2 @@
component {d30aae8b-f352-4de3-b936-bb9d875df0bb} SelfSupportService.js
contract @mozilla.org/mozselfsupport;1 {d30aae8b-f352-4de3-b936-bb9d875df0bb}
category JavaScript-global-privileged-property MozSelfSupport @mozilla.org/mozselfsupport;1

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

@ -213,6 +213,7 @@
#include "mozilla/dom/Console.h"
#include "mozilla/dom/FunctionBinding.h"
#include "mozilla/dom/HashChangeEvent.h"
#include "mozilla/dom/MozSelfSupportBinding.h"
#include "mozilla/dom/PopStateEvent.h"
#include "mozilla/dom/PopupBlockedEvent.h"
#include "mozilla/dom/WindowBinding.h"
@ -1467,6 +1468,8 @@ nsGlobalWindow::CleanUp()
mExternal = nullptr;
mMozSelfSupport = nullptr;
mPerformance = nullptr;
#ifdef MOZ_WEBSPEECH
@ -1786,6 +1789,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsGlobalWindow)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCrypto)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mConsole)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mExternal)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMozSelfSupport)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
@ -1846,6 +1850,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsGlobalWindow)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mCrypto)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mConsole)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mExternal)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mMozSelfSupport)
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
@ -4065,6 +4070,19 @@ nsGlobalWindow::GetContent(nsIDOMWindow** aContent)
return rv.ErrorCode();
}
MozSelfSupport*
nsGlobalWindow::GetMozSelfSupport(ErrorResult& aError)
{
if (mMozSelfSupport) {
return mMozSelfSupport;
}
AutoSafeJSContext cx;
GlobalObject global(cx, FastGetGlobalJSObject());
mMozSelfSupport = MozSelfSupport::Constructor(global, cx, aError);
return mMozSelfSupport;
}
NS_IMETHODIMP
nsGlobalWindow::GetScriptableContent(JSContext* aCx, JS::MutableHandle<JS::Value> aVal)
{

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

@ -114,6 +114,7 @@ class External;
class Function;
class Gamepad;
class MediaQueryList;
class MozSelfSupport;
class Navigator;
class OwningExternalOrWindowProxy;
class Selection;
@ -1016,6 +1017,9 @@ public:
bool aWrapAround, bool aWholeWord, bool aSearchInFrames,
bool aShowDialog, mozilla::ErrorResult& aError);
uint64_t GetMozPaintCount(mozilla::ErrorResult& aError);
mozilla::dom::MozSelfSupport* GetMozSelfSupport(mozilla::ErrorResult& aError);
already_AddRefed<nsIDOMWindow> OpenDialog(JSContext* aCx,
const nsAString& aUrl,
const nsAString& aName,
@ -1562,6 +1566,8 @@ protected:
// it wouldn't see the ~External function's declaration.
nsCOMPtr<nsISupports> mExternal;
nsRefPtr<mozilla::dom::MozSelfSupport> mMozSelfSupport;
nsRefPtr<mozilla::dom::DOMStorage> mLocalStorage;
nsRefPtr<mozilla::dom::DOMStorage> mSessionStorage;

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

@ -11,8 +11,9 @@
* specific Mozilla domains to access it directly.
*/
[ChromeOnly,
JSImplementation="@mozilla.org/mozselfsupport;1"]
interface MozSelfSupportImpl
JSImplementation="@mozilla.org/mozselfsupport;1",
Constructor()]
interface MozSelfSupport
{
/**
* Controls whether uploading FHR data is allowed.

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

@ -328,6 +328,14 @@ partial interface Window {
*/
[Throws] readonly attribute unsigned long long mozPaintCount;
/**
* This property exists because static attributes don't yet work for
* JS-implemented WebIDL (see bugs 1058606 and 863952). With this hack, we
* can use `MozSelfSupport.something(...)`, which will continue to work
* after we ditch this property and switch to static attributes. See
*/
[ChromeOnly, Throws] readonly attribute MozSelfSupport MozSelfSupport;
[Pure]
attribute EventHandler onwheel;