Commit Graph

68 Commits

Author SHA1 Message Date
Razvan Maries
490fef059b Backed out changeset 585e0230b2d5 (bug 1580766) as requested. CLOSED TREE 2020-06-16 21:01:26 +03:00
Dave Townsend
25aeede5c9 Bug 1580766 - Add a unique ID for the BrowsingContext tree inside a browser element. r=kmag
This adds a `browserId` property to all browsing contexts. This ID is the same
for the entire tree of contexts inside a frame element. Each new top-level
context created for a given frame also inherits this ID. This allows identifying
the frame element for a given browsing context.

Originally authored by :mossop in D56245.

Differential Revision: https://phabricator.services.mozilla.com/D77911
2020-06-16 17:25:16 +00:00
Nika Layzell
174e1aa778 Bug 1640019 - Part 5: Remove a number of now-unused 'updateBrowserRemoteness' parameters, r=Gijs
These were only used by process switches triggered via DocumentChannel, which
now take the PROCESS_BEHAVIOR_STANDARD codepath.

Differential Revision: https://phabricator.services.mozilla.com/D78973
2020-06-15 23:23:58 +00:00
Nika Layzell
a63c2d972f Bug 1640019 - Part 3: Also allow switching between remote and non-remote, r=mattwoodrow,necko-reviewers,valentin
Due to the PPDC process switching changes, we also handle switching between
remote and non-remote browsers with DocumentLoadListener. Adds support to
CanonicalBrowsingContext::ChangeFrameRemoteness to allow it to handle non-remote
browsers as well.

Differential Revision: https://phabricator.services.mozilla.com/D78971
2020-06-15 23:23:53 +00:00
Nika Layzell
ffba327709 Bug 1640019 - Part 2: Use new process switch logic in tabbrowser, r=mattwoodrow,Gijs
Add a series of extra hooks and methods to allow tabbrowser to use the new
process switching codepath. This duplicates some of the logic from
`updateBrowserRemoteness` into event handlers.

Differential Revision: https://phabricator.services.mozilla.com/D78970
2020-06-15 23:23:46 +00:00
Nika Layzell
cd7c835794 Bug 1640019 - Part 1: Support toplevel process switches outside of tabbrowser, r=mattwoodrow
This new process switching behavior is only enabled for some browser elements,
which have specified a specific attribute. Turning this on for all browsers with
a `remote` attribute causes breakage in reftests.

The initial version does not handle switching from remote to parent or
vice-versa, that is covered in a later part.

Differential Revision: https://phabricator.services.mozilla.com/D78969
2020-06-15 23:23:43 +00:00
Bogdan Tara
01729dc302 Backed out changeset 26231891f004 (bug 1644943) for browser_backforward_userinteraction.js and browser_sessionHistory.js failures CLOSED TREE 2020-06-16 02:46:15 +03:00
Matt Woodrow
396f3259ce Bug 1644943 - Create single webprogress for CanonicalBrowsingContext, regardless of process the browser element contents are in. r=nika,kmag,Gijs
I think at this point we can remove all of RemoteWebProgressManager, some/all of the TabProgressListener recreations, and probably a bunch more.

Differential Revision: https://phabricator.services.mozilla.com/D79240
2020-06-15 22:01:34 +00:00
Kris Maglione
b3de2b5b10 Bug 1644439: Don't force frame loader initialization during reflow from focus manager. r=hsivonen
When trying to get the current focused element during reflow, when the current
focused element in the document is a frame which has yet to be initialized,
attempting to walk through that frame's BrowsingContext causes immediate frame
loader initialization. Since frame loader initialization often requires running
scripts, that's unsafe, which is why we defer initialization until the end of
any in-progress reflow or document update.

This patch fixes the focus manager code to ignore any uninitialized frame
loaders it comes across, since by definition they cannot have any
currently-focused element until their subdocuments have been created.

Differential Revision: https://phabricator.services.mozilla.com/D79392
2020-06-12 10:22:56 +00:00
Narcis Beleuzu
a4b06a5d82 Backed out 10 changesets (bug 1508306, bug 1640019) for bc failures on browser_autoOpen.js . CLOSED TREE
Backed out changeset 8844170ff408 (bug 1508306)
Backed out changeset b750f1d873cf (bug 1508306)
Backed out changeset c7170e76e676 (bug 1640019)
Backed out changeset 5905995e4815 (bug 1640019)
Backed out changeset 7bf86513348e (bug 1640019)
Backed out changeset f7d0605295f7 (bug 1640019)
Backed out changeset 521b4d5a9a89 (bug 1640019)
Backed out changeset 8542edc564bc (bug 1640019)
Backed out changeset 4f6a03152526 (bug 1640019)
Backed out changeset 30d2bf04719b (bug 1640019)
2020-06-12 22:47:50 +03:00
Nika Layzell
89527c6384 Bug 1640019 - Part 5: Remove a number of now-unused 'updateBrowserRemoteness' parameters, r=Gijs
These were only used by process switches triggered via DocumentChannel, which
now take the PROCESS_BEHAVIOR_STANDARD codepath.

Differential Revision: https://phabricator.services.mozilla.com/D78973
2020-06-12 16:52:04 +00:00
Nika Layzell
16ae2e2676 Bug 1640019 - Part 3: Also allow switching between remote and non-remote, r=mattwoodrow,necko-reviewers,valentin
Due to the PPDC process switching changes, we also handle switching between
remote and non-remote browsers with DocumentLoadListener. Adds support to
CanonicalBrowsingContext::ChangeFrameRemoteness to allow it to handle non-remote
browsers as well.

Differential Revision: https://phabricator.services.mozilla.com/D78971
2020-06-12 16:52:01 +00:00
Nika Layzell
76084be5e4 Bug 1640019 - Part 2: Use new process switch logic in tabbrowser, r=mattwoodrow,Gijs
Add a series of extra hooks and methods to allow tabbrowser to use the new
process switching codepath. This duplicates some of the logic from
`updateBrowserRemoteness` into event handlers.

Differential Revision: https://phabricator.services.mozilla.com/D78970
2020-06-12 16:52:01 +00:00
Nika Layzell
ff4af69c9c Bug 1640019 - Part 1: Support toplevel process switches outside of tabbrowser, r=mattwoodrow
This new process switching behavior is only enabled for some browser elements,
which have specified a specific attribute. Turning this on for all browsers with
a `remote` attribute causes breakage in reftests.

The initial version does not handle switching from remote to parent or
vice-versa, that is covered in a later part.

Differential Revision: https://phabricator.services.mozilla.com/D78969
2020-06-12 16:52:00 +00:00
Nika Layzell
2b90c6c545 Bug 1633812 - Simplify the subframe crash codepath, r=farre
Previously the BrowsingContext was also being sent down, despite it being
obvious from the PBrowserBridge actor which the message was sent over.

Differential Revision: https://phabricator.services.mozilla.com/D72929
2020-04-29 09:58:50 +00:00
Eden Chuang
5a92f0a34d Bug 1598131 - Propagate the browsingContext's COEP to the new created one in nsFrameLoader::Recreate r=farre
The COEP header needs to propagate to the new created BrowsingContext for process switching.

Differential Revision: https://phabricator.services.mozilla.com/D69936
2020-04-17 11:29:13 +00:00
Nika Layzell
9940f96271 Bug 1610850 - Part 1: Switch BrowsingContext when navigating parent to remote, r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D67921
2020-03-26 17:37:19 +00:00
Matt Woodrow
d77d408034 Bug 1620875 - Suppress extra onStateChange(STATE_START) notifications from RemoteWebProgress when switching DocumentChannel with a real channel. r=Gijs,nika
Note that this also suppresses notifications from the initial about:blank in the new process, and updates the tabbrowser to not expect those.

Differential Revision: https://phabricator.services.mozilla.com/D65923
2020-03-17 00:50:29 +00:00
Nika Layzell
9638b99abf Bug 1615480 - Part 3: Rename nsFrameLoader::mBrowsingContext to avoid confusion, r=kmag
The new name should make it more clear that this should not be the default way
to look up the BrowsingContext instance from a nsFrameLoader, as it does not
ensure that the BrowsingContext has been fully initialized and attached to the
tree.

Differential Revision: https://phabricator.services.mozilla.com/D62959
2020-02-21 21:53:33 +00:00
Nika Layzell
b6a044a365 Bug 1615480 - Part 1: Return a raw pointer from Get[Extant]BrowsingContext, r=kmag
The BrowsingContext is guaranteed to be being kept alive by
`nsFrameLoader::mBrowsingContext` and by the nsDocShell or RemoteBrowser object.
This improves the ergonomics of this helper method, which may help avoid misuse
of `mBrowsingContext`.

Differential Revision: https://phabricator.services.mozilla.com/D62957
2020-02-21 21:03:54 +00:00
Cosmin Sabou
243d82098b Backed out 3 changesets (bug 1615480) for causing build bustages on nsFrameLoader.cpp.
CLOSED TREE

Backed out changeset d6fd08e3fccf (bug 1615480)
Backed out changeset ad31eae54af2 (bug 1615480)
Backed out changeset 70aff2593d98 (bug 1615480)
2020-02-21 23:00:55 +02:00
Nika Layzell
38ed6e3be9 Bug 1615480 - Part 3: Rename nsFrameLoader::mBrowsingContext to avoid confusion, r=kmag
The new name should make it more clear that this should not be the default way
to look up the BrowsingContext instance from a nsFrameLoader, as it does not
ensure that the BrowsingContext has been fully initialized and attached to the
tree.

Differential Revision: https://phabricator.services.mozilla.com/D62959
2020-02-21 18:46:38 +00:00
Nika Layzell
88323b85cf Bug 1615480 - Part 1: Return a raw pointer from Get[Extant]BrowsingContext, r=kmag
The BrowsingContext is guaranteed to be being kept alive by
`nsFrameLoader::mBrowsingContext` and by the nsDocShell or RemoteBrowser object.
This improves the ergonomics of this helper method, which may help avoid misuse
of `mBrowsingContext`.

Differential Revision: https://phabricator.services.mozilla.com/D62957
2020-02-21 18:44:57 +00:00
Kris Maglione
d7e4043bb8 Bug 1582832: Part 1 - Make FrameLoader owner rather than DocShell responsible for discarding a BC. r=nika
There are all sorts of lifecycle issues which arise from making DocShell
responsible for discarding BrowsingContexts. In this particular bug, we tend
to run into them in cases where we create a BrowsingContext for a FrameLoader,
and then never create a DocShell for it, leading to it never being destroyed.
But there are myriad other issues as well.

This patch moves the responsibility for BrowsingContext lifecycle management
to the FrameLoader/FrameLoaderOwner, rather than the DocShell, which makes
things more consistent, and more closely aligns with spec-defined behavior.

Differential Revision: https://phabricator.services.mozilla.com/D59008
2020-02-06 19:07:56 +00:00
Daniel Holbert
345c3523de Bug 1613206: Remove possibly-ignored-by-the-compiler MOZ_ASSERT(this) from nsFrameLoaderOwner.cpp, to address -Wundefined-bool-conversion build warning. r=nika
Differential Revision: https://phabricator.services.mozilla.com/D61621
2020-02-04 19:45:12 +00:00
Matt Woodrow
8f333e70fe Bug 1603196 - Skip START_STOP notifications from old process being delivered to RemoteWebProgress when process switching during a load. r=kmag,nika
This doesn't block the STATE_START notification from the new process, as we currently have a second start notification (when DocumentChannel redirects to the real channel), so this is unchanged.

Differential Revision: https://phabricator.services.mozilla.com/D56818
2020-01-09 22:31:40 +00:00
Nika Layzell
05036b09ce Bug 1589054 - Part 4: Run DisplayLoadError in a script runner, r=farre
Differential Revision: https://phabricator.services.mozilla.com/D50025
2019-10-22 13:57:01 +00:00
Nika Layzell
ada5487cbe Bug 1589054 - Part 2: Delay pagehide events until new nsFrameLoader is set up, r=farre
If these are fired too early, a nested event loop can be spun before the new
nsFrameLoader has been set up. Messages can be received over the
BrowserBridgeChild actor during this time when no nsFrameLoader is set, causing
crashes.

Differential Revision: https://phabricator.services.mozilla.com/D49647
2019-10-22 13:57:00 +00:00
Nika Layzell
d07703675c Bug 1589054 - Part 1: Cleanly kill BrowserBridgeChild if process switch fails, r=farre
Differential Revision: https://phabricator.services.mozilla.com/D49464
2019-10-22 13:57:00 +00:00
Cosmin Sabou
38e7caebd5 Backed out 3 changesets (bug 1589054) for browser chrome failures on browser_crash_oopiframe.js CLOSED TREE
Backed out changeset 1a43032819e1 (bug 1589054)
Backed out changeset 91e4d5c6422a (bug 1589054)
Backed out changeset 03bc24aa3a2c (bug 1589054)
2019-10-21 19:29:20 +03:00
Nika Layzell
e6b0b7e2d1 Bug 1589054 - Part 2: Delay pagehide events until new nsFrameLoader is set up, r=farre
If these are fired too early, a nested event loop can be spun before the new
nsFrameLoader has been set up. Messages can be received over the
BrowserBridgeChild actor during this time when no nsFrameLoader is set, causing
crashes.

Differential Revision: https://phabricator.services.mozilla.com/D49647
2019-10-21 14:03:38 +00:00
Nika Layzell
4808e08a6d Bug 1589054 - Part 1: Cleanly kill BrowserBridgeChild if process switch fails, r=farre
Differential Revision: https://phabricator.services.mozilla.com/D49464
2019-10-21 14:03:36 +00:00
Nika Layzell
2653b16f9a Bug 1576714 - Part 3: Initiate subframe process switches from the parent, r=kmag
This flips the direction in which the BrowserBridge actor is generally created
such that it is generally created in the parent and sent down to a child
process.

This is done by making the decision about what kind of switch to perform in the
parent, and sending messages down to child processes async to orchestrate these
process changes.

Process launching is changed to use an async `MozPromise`-returning API in this
patch, though the actual process launching still occurs synchronously. A future
patch will enable performing async process launching through the
NewOrUsedBrowserProcess mechanism.

I know of at least a few timing issues which exist with the new logic,
especially around the state of the BrowsingContext during the process
transition. I decided to not try to fix all of these issues in this patch, as
many are complex and will require changing how we manage the lifecycle of
BrowsingContext substantially. I do, however, think that the new logic is more
reliable and has fewer timing issues than the previous logic.

Differential Revision: https://phabricator.services.mozilla.com/D47310
2019-10-15 16:19:16 +00:00
Sylvestre Ledru
49802d0a8e Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D47737
2019-10-06 18:29:55 +00:00
Csoregi Natalia
107c11ccab Backed out 7 changesets (bug 1576714) for fission permafailures on test_bug590812.html. a=backout
Backed out changeset d0c49f00eb91 (bug 1576714)
Backed out changeset faecc9f35b49 (bug 1576714)
Backed out changeset 2e156655c31e (bug 1576714)
Backed out changeset eece722082c7 (bug 1576714)
Backed out changeset ebda40f96884 (bug 1576714)
Backed out changeset 7dce423417d8 (bug 1576714)
Backed out changeset 9a5072019168 (bug 1576714)
2019-10-05 00:08:33 +03:00
Nika Layzell
59a927155f Bug 1576714 - Part 3: Initiate subframe process switches from the parent, r=kmag
This flips the direction in which the BrowserBridge actor is generally created
such that it is generally created in the parent and sent down to a child
process.

This is done by making the decision about what kind of switch to perform in the
parent, and sending messages down to child processes async to orchestrate these
process changes.

Process launching is changed to use an async `MozPromise`-returning API in this
patch, though the actual process launching still occurs synchronously. A future
patch will enable performing async process launching through the
NewOrUsedBrowserProcess mechanism.

I know of at least a few timing issues which exist with the new logic,
especially around the state of the BrowsingContext during the process
transition. I decided to not try to fix all of these issues in this patch, as
many are complex and will require changing how we manage the lifecycle of
BrowsingContext substantially. I do, however, think that the new logic is more
reliable and has fewer timing issues than the previous logic.

Differential Revision: https://phabricator.services.mozilla.com/D47310
2019-10-03 21:40:24 +00:00
Brindusan Cristian
f5f4823217 Backed out 6 changesets (bug 1576714) for build bustages at nsFrameLoaderOwner.cpp. CLOSED TREE
Backed out changeset 083967e704d2 (bug 1576714)
Backed out changeset b3467f1bdde7 (bug 1576714)
Backed out changeset 88e3b4b7fbaf (bug 1576714)
Backed out changeset b91221da32c7 (bug 1576714)
Backed out changeset 6996b7705f06 (bug 1576714)
Backed out changeset a303fc193f60 (bug 1576714)
2019-10-02 04:14:53 +03:00
Nika Layzell
eb7940e4be Bug 1576714 - Part 3: Initiate subframe process switches from the parent, r=kmag
This flips the direction in which the BrowserBridge actor is generally created
such that it is generally created in the parent and sent down to a child
process.

This is done by making the decision about what kind of switch to perform in the
parent, and sending messages down to child processes async to orchestrate these
process changes.

Process launching is changed to use an async `MozPromise`-returning API in this
patch, though the actual process launching still occurs synchronously. A future
patch will enable performing async process launching through the
NewOrUsedBrowserProcess mechanism.

I know of at least a few timing issues which exist with the new logic,
especially around the state of the BrowsingContext during the process
transition. I decided to not try to fix all of these issues in this patch, as
many are complex and will require changing how we manage the lifecycle of
BrowsingContext substantially. I do, however, think that the new logic is more
reliable and has fewer timing issues than the previous logic.

Differential Revision: https://phabricator.services.mozilla.com/D47310
2019-10-01 18:09:03 +00:00
Kris Maglione
b170b55009 Bug 1582523: Part 1 - Actually block document load event during OOP frame loads. r=nika
This fixes both our failure to register load blockers for remote frames and
our failure to keep the load event blocked during frameloader rebuilding on
remoteness change.

Differential Revision: https://phabricator.services.mozilla.com/D46503
2019-09-19 11:45:36 -07:00
Matt Woodrow
58cd9c06df Bug 1546022 - Activate mouse over state for new BrowserParents. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D44413
2019-09-18 02:06:32 +00:00
Oana Pop Rus
2a7a6dae26 Backed out changeset 3a49482c8210 (bug 1546022) for build bustage in nsFrameLoaderOwner.cpp on a CLOSED TREE 2019-09-18 04:22:40 +03:00
Matt Woodrow
38009df55e Bug 1546022 - Activate mouse over state for new BrowserParents. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D44413
2019-09-17 14:22:40 +00:00
Nika Layzell
49231332a9 Bug 1579213 - Remove unused fields from ChangeRemoteness API, r=farre
This patch changes a few things about how nsFrameLoader is created, specifically
around the ChangeRemoteness API.

1. The private 'nsFrameLoader::nsFrameLoader' constructor has been simplified to
   only have one overload, shared by the different `::Create` static methods.

2. The creation static method used by `ChangeRemoteness` has changed name to
   `::Recreate`, as the signature is becoming more like the old method.

3. The `mNetworkCreated` bit is preserved when doing a `ChangeRemoteness`, as a
   remoteness change shouldn't be affecting that property.

4. Unused fields are removed from the ChangeRemoteness API.

5. The `remoteType` attribute is now mandatory in the ChangeRemoteness API,
   which simplifies the logic and makes it harder to accidentally misuse.

Differential Revision: https://phabricator.services.mozilla.com/D44893
2019-09-11 08:09:58 +00:00
Andreas Farre
bebc385f98 Bug 1563619 - Handle subframe crashes in BrowserParent::ActorDestroy. r=mconley,kmag,peterv
Differential Revision: https://phabricator.services.mozilla.com/D40937
2019-08-26 13:08:32 +00:00
Nicholas Nethercote
c4aacd8403 Bug 1563139 - Remove StaticPrefs.h. r=glandium
This requires replacing inclusions of it with inclusions of more specific prefs
files.

The exception is that StaticPrefsAll.h, which is equivalent to StaticPrefs.h,
and is used in `Codegen.py` because doing something smarter is tricky and
suitable for a follow-up. As a result, any change to StaticPrefList.yaml will
still trigger recompilation of all the generated DOM bindings files, but that's
still a big improvement over trigger recompilation of every file that uses
static prefs.

Most of the changes in this commit are very boring. The only changes that are
not boring are modules/libpref/*, Codegen.py, and ServoBindings.toml.

Differential Revision: https://phabricator.services.mozilla.com/D39138
2019-07-26 01:10:23 +00:00
Nika Layzell
15f08e0857 Bug 1555753 - Always enable Browsing Context preservation in fission windows, r=farre
Differential Revision: https://phabricator.services.mozilla.com/D33544
2019-06-10 13:06:46 +00:00
Sylvestre Ledru
69746836db Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D30883
2019-05-25 17:46:15 +00:00
arthur.iakab
699b884244 Backed out changeset a296439a25ff (bug 1519636) for frequent Windows cppunit failures CLOSED TREE 2019-05-24 14:26:01 +03:00
Sylvestre Ledru
10a773a4ca Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D30883
2019-05-24 09:59:17 +00:00
Kyle Machulis
20acabe83b Bug 1540839 - Add pref for preserving browsing contexts; r=nika
Still having lots of issues with tests failing, but need to get this
landed for various reasons. Followup to pref on at Bug 1550571.

Differential Revision: https://phabricator.services.mozilla.com/D30563
2019-05-14 10:51:09 -07:00