mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
browser(firefox): implement geolocation overrides (#1437)
This commit is contained in:
parent
fa02b841a9
commit
fcdfa9ca24
@ -1 +1 @@
|
|||||||
1043
|
1044
|
||||||
|
|||||||
@ -138,10 +138,18 @@ index 040c7b124dec6bb254563bbe74fe50012cb077a3..b4e6b8132786af70e8ad0dce88b67c28
|
|||||||
const transportProvider = {
|
const transportProvider = {
|
||||||
setListener(upgradeListener) {
|
setListener(upgradeListener) {
|
||||||
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
|
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
|
||||||
index 344bd4a9f524616b98c664d4fb2b2154927ea7c8..5badad7c28f518c5be27341d38f0658b7413e2fb 100644
|
index 344bd4a9f524616b98c664d4fb2b2154927ea7c8..abcc9be78508a9788c3b4872a1eb344ddf2f9464 100644
|
||||||
--- a/docshell/base/nsDocShell.cpp
|
--- a/docshell/base/nsDocShell.cpp
|
||||||
+++ b/docshell/base/nsDocShell.cpp
|
+++ b/docshell/base/nsDocShell.cpp
|
||||||
@@ -96,6 +96,7 @@
|
@@ -53,6 +53,7 @@
|
||||||
|
#include "mozilla/dom/ContentFrameMessageManager.h"
|
||||||
|
#include "mozilla/dom/DocGroup.h"
|
||||||
|
#include "mozilla/dom/Element.h"
|
||||||
|
+#include "mozilla/dom/Geolocation.h"
|
||||||
|
#include "mozilla/dom/HTMLAnchorElement.h"
|
||||||
|
#include "mozilla/dom/PerformanceNavigation.h"
|
||||||
|
#include "mozilla/dom/PermissionMessageUtils.h"
|
||||||
|
@@ -96,6 +97,7 @@
|
||||||
#include "nsIDocShellTreeItem.h"
|
#include "nsIDocShellTreeItem.h"
|
||||||
#include "nsIDocShellTreeOwner.h"
|
#include "nsIDocShellTreeOwner.h"
|
||||||
#include "mozilla/dom/Document.h"
|
#include "mozilla/dom/Document.h"
|
||||||
@ -149,7 +157,7 @@ index 344bd4a9f524616b98c664d4fb2b2154927ea7c8..5badad7c28f518c5be27341d38f0658b
|
|||||||
#include "nsIDocumentLoaderFactory.h"
|
#include "nsIDocumentLoaderFactory.h"
|
||||||
#include "nsIDOMWindow.h"
|
#include "nsIDOMWindow.h"
|
||||||
#include "nsIEditingSession.h"
|
#include "nsIEditingSession.h"
|
||||||
@@ -351,6 +352,8 @@ nsDocShell::nsDocShell(BrowsingContext* aBrowsingContext,
|
@@ -351,6 +353,8 @@ nsDocShell::nsDocShell(BrowsingContext* aBrowsingContext,
|
||||||
mUseStrictSecurityChecks(false),
|
mUseStrictSecurityChecks(false),
|
||||||
mObserveErrorPages(true),
|
mObserveErrorPages(true),
|
||||||
mCSSErrorReportingEnabled(false),
|
mCSSErrorReportingEnabled(false),
|
||||||
@ -158,7 +166,7 @@ index 344bd4a9f524616b98c664d4fb2b2154927ea7c8..5badad7c28f518c5be27341d38f0658b
|
|||||||
mAllowAuth(mItemType == typeContent),
|
mAllowAuth(mItemType == typeContent),
|
||||||
mAllowKeywordFixup(false),
|
mAllowKeywordFixup(false),
|
||||||
mIsOffScreenBrowser(false),
|
mIsOffScreenBrowser(false),
|
||||||
@@ -1223,6 +1226,7 @@ bool nsDocShell::SetCurrentURI(nsIURI* aURI, nsIRequest* aRequest,
|
@@ -1223,6 +1227,7 @@ bool nsDocShell::SetCurrentURI(nsIURI* aURI, nsIRequest* aRequest,
|
||||||
isSubFrame = mLSHE->GetIsSubFrame();
|
isSubFrame = mLSHE->GetIsSubFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,7 +174,7 @@ index 344bd4a9f524616b98c664d4fb2b2154927ea7c8..5badad7c28f518c5be27341d38f0658b
|
|||||||
if (!isSubFrame && !isRoot) {
|
if (!isSubFrame && !isRoot) {
|
||||||
/*
|
/*
|
||||||
* We don't want to send OnLocationChange notifications when
|
* We don't want to send OnLocationChange notifications when
|
||||||
@@ -3363,6 +3367,54 @@ nsDocShell::GetMessageManager(ContentFrameMessageManager** aMessageManager) {
|
@@ -3363,6 +3368,72 @@ nsDocShell::GetMessageManager(ContentFrameMessageManager** aMessageManager) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,11 +225,29 @@ index 344bd4a9f524616b98c664d4fb2b2154927ea7c8..5badad7c28f518c5be27341d38f0658b
|
|||||||
+ observerService->NotifyObservers(
|
+ observerService->NotifyObservers(
|
||||||
+ ToSupports(element), "juggler-file-picker-shown", nullptr);
|
+ ToSupports(element), "juggler-file-picker-shown", nullptr);
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
|
+RefPtr<nsGeolocationService> nsDocShell::GetGeolocationOverrideService() {
|
||||||
|
+ return mGeolocationOverrideService;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+NS_IMETHODIMP
|
||||||
|
+nsDocShell::SetGeolocationOverride(nsIDOMGeoPosition* aGeolocationOverride) {
|
||||||
|
+ if (aGeolocationOverride) {
|
||||||
|
+ if (!mGeolocationOverrideService) {
|
||||||
|
+ mGeolocationOverrideService = new nsGeolocationService();
|
||||||
|
+ mGeolocationOverrideService->Init();
|
||||||
|
+ }
|
||||||
|
+ mGeolocationOverrideService->Update(aGeolocationOverride);
|
||||||
|
+ } else {
|
||||||
|
+ mGeolocationOverrideService = nullptr;
|
||||||
|
+ }
|
||||||
|
+ return NS_OK;
|
||||||
|
+}
|
||||||
+
|
+
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDocShell::GetIsNavigating(bool* aOut) {
|
nsDocShell::GetIsNavigating(bool* aOut) {
|
||||||
*aOut = mIsNavigating;
|
*aOut = mIsNavigating;
|
||||||
@@ -12138,6 +12190,9 @@ class OnLinkClickEvent : public Runnable {
|
@@ -12138,6 +12209,9 @@ class OnLinkClickEvent : public Runnable {
|
||||||
mNoOpenerImplied, nullptr, nullptr,
|
mNoOpenerImplied, nullptr, nullptr,
|
||||||
mIsUserTriggered, mTriggeringPrincipal, mCsp);
|
mIsUserTriggered, mTriggeringPrincipal, mCsp);
|
||||||
}
|
}
|
||||||
@ -231,7 +257,7 @@ index 344bd4a9f524616b98c664d4fb2b2154927ea7c8..5badad7c28f518c5be27341d38f0658b
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12227,6 +12282,9 @@ nsresult nsDocShell::OnLinkClick(
|
@@ -12227,6 +12301,9 @@ nsresult nsDocShell::OnLinkClick(
|
||||||
this, aContent, aURI, target, aFileName, aPostDataStream,
|
this, aContent, aURI, target, aFileName, aPostDataStream,
|
||||||
aHeadersDataStream, noOpenerImplied, aIsUserTriggered, aIsTrusted,
|
aHeadersDataStream, noOpenerImplied, aIsUserTriggered, aIsTrusted,
|
||||||
aTriggeringPrincipal, aCsp);
|
aTriggeringPrincipal, aCsp);
|
||||||
@ -242,10 +268,18 @@ index 344bd4a9f524616b98c664d4fb2b2154927ea7c8..5badad7c28f518c5be27341d38f0658b
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h
|
diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h
|
||||||
index bd8327aae45f1d56acf0d5e61519c7cf469462f3..58749e9926da642911e5dd67603d5f9c44fa217a 100644
|
index bd8327aae45f1d56acf0d5e61519c7cf469462f3..89cb1a417f129b75ee7e6ec322d121d579d25ef0 100644
|
||||||
--- a/docshell/base/nsDocShell.h
|
--- a/docshell/base/nsDocShell.h
|
||||||
+++ b/docshell/base/nsDocShell.h
|
+++ b/docshell/base/nsDocShell.h
|
||||||
@@ -25,6 +25,7 @@
|
@@ -13,6 +13,7 @@
|
||||||
|
#include "Units.h"
|
||||||
|
#include "jsapi.h"
|
||||||
|
#include "mozilla/BasePrincipal.h"
|
||||||
|
+#include "mozilla/dom/Geolocation.h"
|
||||||
|
#include "mozilla/HalScreenConfiguration.h"
|
||||||
|
#include "mozilla/LinkedList.h"
|
||||||
|
#include "mozilla/Maybe.h"
|
||||||
|
@@ -25,6 +26,7 @@
|
||||||
#include "mozilla/UniquePtr.h"
|
#include "mozilla/UniquePtr.h"
|
||||||
#include "mozilla/WeakPtr.h"
|
#include "mozilla/WeakPtr.h"
|
||||||
#include "mozilla/dom/BrowsingContext.h"
|
#include "mozilla/dom/BrowsingContext.h"
|
||||||
@ -253,7 +287,7 @@ index bd8327aae45f1d56acf0d5e61519c7cf469462f3..58749e9926da642911e5dd67603d5f9c
|
|||||||
#include "mozilla/dom/ChildSHistory.h"
|
#include "mozilla/dom/ChildSHistory.h"
|
||||||
#include "mozilla/dom/ProfileTimelineMarkerBinding.h"
|
#include "mozilla/dom/ProfileTimelineMarkerBinding.h"
|
||||||
#include "mozilla/dom/WindowProxyHolder.h"
|
#include "mozilla/dom/WindowProxyHolder.h"
|
||||||
@@ -481,6 +482,11 @@ class nsDocShell final : public nsDocLoader,
|
@@ -481,6 +483,13 @@ class nsDocShell final : public nsDocLoader,
|
||||||
mSkipBrowsingContextDetachOnDestroy = true;
|
mSkipBrowsingContextDetachOnDestroy = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,11 +295,13 @@ index bd8327aae45f1d56acf0d5e61519c7cf469462f3..58749e9926da642911e5dd67603d5f9c
|
|||||||
+ void FilePickerShown(mozilla::dom::Element* element);
|
+ void FilePickerShown(mozilla::dom::Element* element);
|
||||||
+
|
+
|
||||||
+ bool IsBypassCSPEnabled();
|
+ bool IsBypassCSPEnabled();
|
||||||
|
+
|
||||||
|
+ RefPtr<nsGeolocationService> GetGeolocationOverrideService();
|
||||||
+
|
+
|
||||||
// Create a content viewer within this nsDocShell for the given
|
// Create a content viewer within this nsDocShell for the given
|
||||||
// `WindowGlobalChild` actor.
|
// `WindowGlobalChild` actor.
|
||||||
nsresult CreateContentViewerForActor(
|
nsresult CreateContentViewerForActor(
|
||||||
@@ -1040,6 +1046,8 @@ class nsDocShell final : public nsDocLoader,
|
@@ -1040,6 +1049,8 @@ class nsDocShell final : public nsDocLoader,
|
||||||
|
|
||||||
bool CSSErrorReportingEnabled() const { return mCSSErrorReportingEnabled; }
|
bool CSSErrorReportingEnabled() const { return mCSSErrorReportingEnabled; }
|
||||||
|
|
||||||
@ -274,20 +310,29 @@ index bd8327aae45f1d56acf0d5e61519c7cf469462f3..58749e9926da642911e5dd67603d5f9c
|
|||||||
// Handles retrieval of subframe session history for nsDocShell::LoadURI. If a
|
// Handles retrieval of subframe session history for nsDocShell::LoadURI. If a
|
||||||
// load is requested in a subframe of the current DocShell, the subframe
|
// load is requested in a subframe of the current DocShell, the subframe
|
||||||
// loadType may need to reflect the loadType of the parent document, or in
|
// loadType may need to reflect the loadType of the parent document, or in
|
||||||
@@ -1296,6 +1304,8 @@ class nsDocShell final : public nsDocLoader,
|
@@ -1296,6 +1307,9 @@ class nsDocShell final : public nsDocLoader,
|
||||||
bool mUseStrictSecurityChecks : 1;
|
bool mUseStrictSecurityChecks : 1;
|
||||||
bool mObserveErrorPages : 1;
|
bool mObserveErrorPages : 1;
|
||||||
bool mCSSErrorReportingEnabled : 1;
|
bool mCSSErrorReportingEnabled : 1;
|
||||||
+ bool mFileInputInterceptionEnabled: 1;
|
+ bool mFileInputInterceptionEnabled: 1;
|
||||||
+ bool mBypassCSPEnabled : 1;
|
+ bool mBypassCSPEnabled : 1;
|
||||||
|
+ RefPtr<nsGeolocationService> mGeolocationOverrideService;
|
||||||
bool mAllowAuth : 1;
|
bool mAllowAuth : 1;
|
||||||
bool mAllowKeywordFixup : 1;
|
bool mAllowKeywordFixup : 1;
|
||||||
bool mIsOffScreenBrowser : 1;
|
bool mIsOffScreenBrowser : 1;
|
||||||
diff --git a/docshell/base/nsIDocShell.idl b/docshell/base/nsIDocShell.idl
|
diff --git a/docshell/base/nsIDocShell.idl b/docshell/base/nsIDocShell.idl
|
||||||
index db95b181388e8ab3c074b3b6e036dc971633e396..4cb6e5f5e4499bad0e9eaaee8a99cea55548671f 100644
|
index db95b181388e8ab3c074b3b6e036dc971633e396..bd2ab50b8a5a6f6e3b9618061b752ea52caa239c 100644
|
||||||
--- a/docshell/base/nsIDocShell.idl
|
--- a/docshell/base/nsIDocShell.idl
|
||||||
+++ b/docshell/base/nsIDocShell.idl
|
+++ b/docshell/base/nsIDocShell.idl
|
||||||
@@ -1132,4 +1132,8 @@ interface nsIDocShell : nsIDocShellTreeItem
|
@@ -44,6 +44,7 @@ interface nsIURI;
|
||||||
|
interface nsIChannel;
|
||||||
|
interface nsIContentViewer;
|
||||||
|
interface nsIContentSecurityPolicy;
|
||||||
|
+interface nsIDOMGeoPosition;
|
||||||
|
interface nsIDocShellLoadInfo;
|
||||||
|
interface nsIEditor;
|
||||||
|
interface nsIEditingSession;
|
||||||
|
@@ -1132,4 +1133,10 @@ interface nsIDocShell : nsIDocShellTreeItem
|
||||||
* @see nsISHEntry synchronizeLayoutHistoryState().
|
* @see nsISHEntry synchronizeLayoutHistoryState().
|
||||||
*/
|
*/
|
||||||
void synchronizeLayoutHistoryState();
|
void synchronizeLayoutHistoryState();
|
||||||
@ -295,6 +340,8 @@ index db95b181388e8ab3c074b3b6e036dc971633e396..4cb6e5f5e4499bad0e9eaaee8a99cea5
|
|||||||
+ attribute boolean fileInputInterceptionEnabled;
|
+ attribute boolean fileInputInterceptionEnabled;
|
||||||
+
|
+
|
||||||
+ attribute boolean bypassCSPEnabled;
|
+ attribute boolean bypassCSPEnabled;
|
||||||
|
+
|
||||||
|
+ void setGeolocationOverride(in nsIDOMGeoPosition position);
|
||||||
};
|
};
|
||||||
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
|
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
|
||||||
index 394004780db4017d6ff1561febd4b379705c6302..941ef9f97a4851e785edaf25c0913a1cbd00d041 100644
|
index 394004780db4017d6ff1561febd4b379705c6302..941ef9f97a4851e785edaf25c0913a1cbd00d041 100644
|
||||||
@ -322,6 +369,82 @@ index 394004780db4017d6ff1561febd4b379705c6302..941ef9f97a4851e785edaf25c0913a1c
|
|||||||
// If this is a data document - no need to set CSP.
|
// If this is a data document - no need to set CSP.
|
||||||
if (mLoadedAsData) {
|
if (mLoadedAsData) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
diff --git a/dom/geolocation/Geolocation.cpp b/dom/geolocation/Geolocation.cpp
|
||||||
|
index f2bb0d880f179bb37e915fe5b32692ac4307ecf7..835c8f9098ffe4f63aeac0286faa33ade21f9a0f 100644
|
||||||
|
--- a/dom/geolocation/Geolocation.cpp
|
||||||
|
+++ b/dom/geolocation/Geolocation.cpp
|
||||||
|
@@ -294,10 +294,8 @@ nsGeolocationRequest::Allow(JS::HandleValue aChoices) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
- RefPtr<nsGeolocationService> gs =
|
||||||
|
- nsGeolocationService::GetGeolocationService();
|
||||||
|
-
|
||||||
|
- bool canUseCache = false;
|
||||||
|
+ nsGeolocationService* gs = mLocator->GetGeolocationService();
|
||||||
|
+ bool canUseCache = gs != nsGeolocationService::sService.get();
|
||||||
|
CachedPositionAndAccuracy lastPosition = gs->GetCachedPosition();
|
||||||
|
if (lastPosition.position) {
|
||||||
|
DOMTimeStamp cachedPositionTime_ms;
|
||||||
|
@@ -467,8 +465,7 @@ void nsGeolocationRequest::Shutdown() {
|
||||||
|
// If there are no other high accuracy requests, the geolocation service will
|
||||||
|
// notify the provider to switch to the default accuracy.
|
||||||
|
if (mOptions && mOptions->mEnableHighAccuracy) {
|
||||||
|
- RefPtr<nsGeolocationService> gs =
|
||||||
|
- nsGeolocationService::GetGeolocationService();
|
||||||
|
+ nsGeolocationService* gs = mLocator ? mLocator->GetGeolocationService() : nullptr;
|
||||||
|
if (gs) {
|
||||||
|
gs->UpdateAccuracy();
|
||||||
|
}
|
||||||
|
@@ -745,8 +742,14 @@ void nsGeolocationService::StopDevice() {
|
||||||
|
StaticRefPtr<nsGeolocationService> nsGeolocationService::sService;
|
||||||
|
|
||||||
|
already_AddRefed<nsGeolocationService>
|
||||||
|
-nsGeolocationService::GetGeolocationService() {
|
||||||
|
+nsGeolocationService::GetGeolocationService(nsDocShell* docShell) {
|
||||||
|
RefPtr<nsGeolocationService> result;
|
||||||
|
+ if (docShell) {
|
||||||
|
+ result = docShell->GetGeolocationOverrideService();
|
||||||
|
+ if (result)
|
||||||
|
+ return result.forget();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (nsGeolocationService::sService) {
|
||||||
|
result = nsGeolocationService::sService;
|
||||||
|
|
||||||
|
@@ -838,7 +841,9 @@ nsresult Geolocation::Init(nsPIDOMWindowInner* aContentDom) {
|
||||||
|
// If no aContentDom was passed into us, we are being used
|
||||||
|
// by chrome/c++ and have no mOwner, no mPrincipal, and no need
|
||||||
|
// to prompt.
|
||||||
|
- mService = nsGeolocationService::GetGeolocationService();
|
||||||
|
+ nsCOMPtr<Document> doc = aContentDom ? aContentDom->GetDoc() : nullptr;
|
||||||
|
+ mService = nsGeolocationService::GetGeolocationService(
|
||||||
|
+ doc ? static_cast<nsDocShell*>(doc->GetDocShell()) : nullptr);
|
||||||
|
if (mService) {
|
||||||
|
mService->AddLocator(this);
|
||||||
|
}
|
||||||
|
diff --git a/dom/geolocation/Geolocation.h b/dom/geolocation/Geolocation.h
|
||||||
|
index d92bd1c738016f93c66dbdc449c70937c37b6f9a..a4c1f0ca974470342cb8136705d78cfc00e35083 100644
|
||||||
|
--- a/dom/geolocation/Geolocation.h
|
||||||
|
+++ b/dom/geolocation/Geolocation.h
|
||||||
|
@@ -57,7 +57,7 @@ struct CachedPositionAndAccuracy {
|
||||||
|
class nsGeolocationService final : public nsIGeolocationUpdate,
|
||||||
|
public nsIObserver {
|
||||||
|
public:
|
||||||
|
- static already_AddRefed<nsGeolocationService> GetGeolocationService();
|
||||||
|
+ static already_AddRefed<nsGeolocationService> GetGeolocationService(nsDocShell* docShell = nullptr);
|
||||||
|
static mozilla::StaticRefPtr<nsGeolocationService> sService;
|
||||||
|
|
||||||
|
NS_DECL_THREADSAFE_ISUPPORTS
|
||||||
|
@@ -182,6 +182,8 @@ class Geolocation final : public nsIGeolocationUpdate, public nsWrapperCache {
|
||||||
|
// null.
|
||||||
|
static already_AddRefed<Geolocation> NonWindowSingleton();
|
||||||
|
|
||||||
|
+ nsGeolocationService* GetGeolocationService() { return mService; };
|
||||||
|
+
|
||||||
|
private:
|
||||||
|
~Geolocation();
|
||||||
|
|
||||||
diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp
|
diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp
|
||||||
index f495214f53e6568af33fa1350bde798e5f390bfc..9b09feb9425f9bccab583fb1e724aca991822a08 100644
|
index f495214f53e6568af33fa1350bde798e5f390bfc..9b09feb9425f9bccab583fb1e724aca991822a08 100644
|
||||||
--- a/dom/html/HTMLInputElement.cpp
|
--- a/dom/html/HTMLInputElement.cpp
|
||||||
@ -2487,10 +2610,10 @@ index 0000000000000000000000000000000000000000..be70ea364f9534bb3b344f64970366c3
|
|||||||
+
|
+
|
||||||
diff --git a/juggler/content/PageAgent.js b/juggler/content/PageAgent.js
|
diff --git a/juggler/content/PageAgent.js b/juggler/content/PageAgent.js
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..3cafc06be2262a79e8459eb9afc03d424bc01303
|
index 0000000000000000000000000000000000000000..2fbf254062eef50c2298916120f83a8000a5388d
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/juggler/content/PageAgent.js
|
+++ b/juggler/content/PageAgent.js
|
||||||
@@ -0,0 +1,919 @@
|
@@ -0,0 +1,940 @@
|
||||||
+"use strict";
|
+"use strict";
|
||||||
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||||
+const Ci = Components.interfaces;
|
+const Ci = Components.interfaces;
|
||||||
@ -2666,6 +2789,7 @@ index 0000000000000000000000000000000000000000..3cafc06be2262a79e8459eb9afc03d42
|
|||||||
+ setEmulatedMedia: this._setEmulatedMedia.bind(this),
|
+ setEmulatedMedia: this._setEmulatedMedia.bind(this),
|
||||||
+ setFileInputFiles: this._setFileInputFiles.bind(this),
|
+ setFileInputFiles: this._setFileInputFiles.bind(this),
|
||||||
+ setInterceptFileChooserDialog: this._setInterceptFileChooserDialog.bind(this),
|
+ setInterceptFileChooserDialog: this._setInterceptFileChooserDialog.bind(this),
|
||||||
|
+ setGeolocationOverride: this._setGeolocationOverride.bind(this),
|
||||||
+ }),
|
+ }),
|
||||||
+ ];
|
+ ];
|
||||||
+ this._enabled = false;
|
+ this._enabled = false;
|
||||||
@ -2808,6 +2932,26 @@ index 0000000000000000000000000000000000000000..3cafc06be2262a79e8459eb9afc03d42
|
|||||||
+ this._docShell.fileInputInterceptionEnabled = !!enabled;
|
+ this._docShell.fileInputInterceptionEnabled = !!enabled;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+ _setGeolocationOverride({ latitude, longitude, accuracy }) {
|
||||||
|
+ if (latitude !== undefined && longitude !== undefined) {
|
||||||
|
+ this._docShell.setGeolocationOverride({
|
||||||
|
+ coords: {
|
||||||
|
+ latitude,
|
||||||
|
+ longitude,
|
||||||
|
+ accuracy,
|
||||||
|
+ altitude: NaN,
|
||||||
|
+ altitudeAccuracy: NaN,
|
||||||
|
+ heading: NaN,
|
||||||
|
+ speed: NaN,
|
||||||
|
+ },
|
||||||
|
+ address: null,
|
||||||
|
+ timestamp: Date.now()
|
||||||
|
+ });
|
||||||
|
+ } else {
|
||||||
|
+ this._docShell.setGeolocationOverride(null);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ _linkClicked(sync, anchorElement) {
|
+ _linkClicked(sync, anchorElement) {
|
||||||
+ if (anchorElement.ownerGlobal.docShell !== this._docShell)
|
+ if (anchorElement.ownerGlobal.docShell !== this._docShell)
|
||||||
+ return;
|
+ return;
|
||||||
@ -4933,10 +5077,10 @@ index 0000000000000000000000000000000000000000..e1f1e21a20768d707a92ffffc8a7c114
|
|||||||
+this.NetworkHandler = NetworkHandler;
|
+this.NetworkHandler = NetworkHandler;
|
||||||
diff --git a/juggler/protocol/PageHandler.js b/juggler/protocol/PageHandler.js
|
diff --git a/juggler/protocol/PageHandler.js b/juggler/protocol/PageHandler.js
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..11f9567d816304906df6b6192b3fb71e6c9d53dc
|
index 0000000000000000000000000000000000000000..e0b9ee6f25dc94d7c049fc40a61a1b7e70fa38c2
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/juggler/protocol/PageHandler.js
|
+++ b/juggler/protocol/PageHandler.js
|
||||||
@@ -0,0 +1,348 @@
|
@@ -0,0 +1,353 @@
|
||||||
+"use strict";
|
+"use strict";
|
||||||
+
|
+
|
||||||
+const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
+const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||||
@ -5226,6 +5370,11 @@ index 0000000000000000000000000000000000000000..11f9567d816304906df6b6192b3fb71e
|
|||||||
+ throw new Error('ERROR: cannot find worker with id ' + workerId);
|
+ throw new Error('ERROR: cannot find worker with id ' + workerId);
|
||||||
+ return await worker.sendMessage(JSON.parse(message));
|
+ return await worker.sendMessage(JSON.parse(message));
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
|
+ async setGeolocationOverride(options) {
|
||||||
|
+ return await this._contentPage.send('setGeolocationOverride', options);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+class Dialog {
|
+class Dialog {
|
||||||
@ -5436,10 +5585,10 @@ index 0000000000000000000000000000000000000000..78b6601b91d0b7fcda61114e6846aa07
|
|||||||
+this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
|
+this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
|
||||||
diff --git a/juggler/protocol/Protocol.js b/juggler/protocol/Protocol.js
|
diff --git a/juggler/protocol/Protocol.js b/juggler/protocol/Protocol.js
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..9b636b045df0737039d94b5a6efc8c4f004eb58a
|
index 0000000000000000000000000000000000000000..c915c4b2c1dde6941c9fcf424b0a6de36dea0088
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/juggler/protocol/Protocol.js
|
+++ b/juggler/protocol/Protocol.js
|
||||||
@@ -0,0 +1,745 @@
|
@@ -0,0 +1,752 @@
|
||||||
+const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
|
+const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
|
||||||
+
|
+
|
||||||
+// Protocol-specific types.
|
+// Protocol-specific types.
|
||||||
@ -6160,6 +6309,13 @@ index 0000000000000000000000000000000000000000..9b636b045df0737039d94b5a6efc8c4f
|
|||||||
+ message: t.String,
|
+ message: t.String,
|
||||||
+ },
|
+ },
|
||||||
+ },
|
+ },
|
||||||
|
+ 'setGeolocationOverride': {
|
||||||
|
+ params: {
|
||||||
|
+ latitude: t.Optional(t.Number),
|
||||||
|
+ longitude: t.Optional(t.Number),
|
||||||
|
+ accuracy: t.Optional(t.Number)
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
+ },
|
+ },
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user