Commit graph

494 commits

Author SHA1 Message Date
Valentin Gosu
982bdfbbbd Bug 1579992 - Load pages into new webCOOP+COEP process type r=nika
* This patch makes pages with the `OPENER_POLICY_SAME_ORIGIN_EMBEDDER_POLICY_REQUIRE_CORP` policy load into a special `webCOOP+COEP={pageOrigin}` remote type.
* Adds `E10SUtils.WEB_REMOTE_COOP_COEP_TYPE_PREFIX="webCOOP+COEP="`
* When a COOP process switch occurs and the target page doesn't have this policy, we pass a `preferredRemoteType="web"` into `E10SUtils.getRemoteTypeForPrincipal` ensuring that we correctly get a different `remoteType`
* E10SUtils.getRemoteTypeForPrincipal is changed such that `if preferredRemoteType.startsWith(WEB_REMOTE_COOP_COEP_TYPE_PREFIX)` we don't override it with `webIsolated={pageOrigin}`.
* `coop_header.sjs` is changed to also allow setting `Cross-Origin-Embedder-Policy` headers
* `browser_httpCrossOriginOpenerPolicy.js` is changed to test that pages are correctly opened in the correct remoteType process.

Differential Revision: https://phabricator.services.mozilla.com/D48715

--HG--
extra : moz-landing-system : lando
2019-10-22 08:02:16 +00:00
shindli
ebcb4e6fbf Backed out changeset 5686e9cc48b2 (bug 1579992) for causing bc failures in browser/components/aboutlogins/tests/browser/browser_dismissFooter.js CLOSED TREE 2019-10-21 21:09:24 +03:00
Valentin Gosu
74ec329cc9 Bug 1579992 - Load pages into new webCOOP+COEP process type r=nika
* This patch makes pages with the `OPENER_POLICY_SAME_ORIGIN_EMBEDDER_POLICY_REQUIRE_CORP` policy load into a special `webCOOP+COEP={pageOrigin}` remote type.
* Adds `E10SUtils.WEB_REMOTE_COOP_COEP_TYPE_PREFIX="webCOOP+COEP="`
* When a COOP process switch occurs and the target page doesn't have this policy, we pass a `preferredRemoteType="web"` into `E10SUtils.getRemoteTypeForPrincipal` ensuring that we correctly get a different `remoteType`
* E10SUtils.getRemoteTypeForPrincipal is changed such that `if preferredRemoteType.startsWith(WEB_REMOTE_COOP_COEP_TYPE_PREFIX)` we don't override it with `webIsolated={pageOrigin}`.
* `coop_header.sjs` is changed to also allow setting `Cross-Origin-Embedder-Policy` headers
* `browser_httpCrossOriginOpenerPolicy.js` is changed to test that pages are correctly opened in the correct remoteType process.

Differential Revision: https://phabricator.services.mozilla.com/D48715

--HG--
extra : moz-landing-system : lando
2019-10-21 16:56:00 +00:00
Nika Layzell
965f006a70 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

--HG--
extra : moz-landing-system : lando
2019-10-15 16:19:16 +00:00
Csoregi Natalia
8768a4f5e3 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
89b22d83ef 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

--HG--
extra : moz-landing-system : lando
2019-10-03 21:40:24 +00:00
Brindusan Cristian
950e03660b 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
f55d088ec3 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

--HG--
extra : moz-landing-system : lando
2019-10-01 18:09:03 +00:00
Jean-Yves Avenard
4986f63ec2 Bug 1575744 - P2. Add nsIProcessSwitchRequestor interface. r=mayhemer,nika
Will allow for SessionStore.jsm process switching to be used by other objects than nsHttpChannel.

Differential Revision: https://phabricator.services.mozilla.com/D46015

--HG--
extra : moz-landing-system : lando
2019-09-20 04:09:46 +00:00
Bogdan Tara
bee28f01d7 Backed out 8 changesets (bug 1575744) for HttpChannelParent related assertion failures
Backed out changeset af61675dd488 (bug 1575744)
Backed out changeset bf794b9373c8 (bug 1575744)
Backed out changeset 39ffb74d2e12 (bug 1575744)
Backed out changeset c1547b3df672 (bug 1575744)
Backed out changeset 382ee8672027 (bug 1575744)
Backed out changeset 5abb38484f11 (bug 1575744)
Backed out changeset d5244c1bbfe8 (bug 1575744)
Backed out changeset c74b81debf73 (bug 1575744)

--HG--
rename : netwerk/base/nsIProcessSwitchRequestor.idl => netwerk/base/nsICrossProcessSwitchChannel.idl
2019-09-20 06:58:44 +03:00
Jean-Yves Avenard
db9dcef811 Bug 1575744 - P2. Add nsIProcessSwitchRequestor interface. r=mayhemer,nika
Will allow for SessionStore.jsm process switching to be used by other objects than nsHttpChannel.

Differential Revision: https://phabricator.services.mozilla.com/D46015

--HG--
extra : moz-landing-system : lando
2019-09-18 23:49:51 +00:00
Valentin Gosu
44d8431a8c Bug 1513574 - Remove UAOverridesBootstrapper r=michal
Differential Revision: https://phabricator.services.mozilla.com/D14750

--HG--
extra : moz-landing-system : lando
2019-09-16 15:21:18 +00:00
monikamaheshwari
9d60e0d578 Bug 1578683 Turn on ESLint rule prefer-boolean-length-check for toolkit and browser r=Standard8
Differential Revision: https://phabricator.services.mozilla.com/D45629

--HG--
extra : moz-landing-system : lando
2019-09-14 09:39:26 +00:00
Mike Conley
bffea54155 Bug 1563500 - Avoid accessing bogus reftest gBrowser in SessionStore.onMayChangeProcess. r=nika
Differential Revision: https://phabricator.services.mozilla.com/D40322

--HG--
extra : moz-landing-system : lando
2019-08-12 20:09:21 +00:00
Alphan Chen
02e1dcbe25 bug 1562889 - Convert content-sessionStore to C++: add browser epochs support r=peterv
Differential Revision: https://phabricator.services.mozilla.com/D36606

--HG--
extra : moz-landing-system : lando
2019-07-11 09:46:14 +00:00
Jonathan Kingston
31441f82ea Bug 1560455 - rename CodebasePrincipal to ContentPrincipal. r=ckerschb
Differential Revision: https://phabricator.services.mozilla.com/D35504

--HG--
extra : moz-landing-system : lando
2019-07-08 16:37:45 +00:00
Victor Porof
1f830c96da Bug 1561435 - Format browser/components/, a=automatic-formatting
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D36042

--HG--
extra : source : d3afcafdce650a6f36cebbc126ee93b17f13cf52
2019-07-05 09:53:32 +02:00
Gijs Kruitbosch
dcee1806ad Bug 1551671 - don't allow restoring minimized or toolbarless initial windows, r=mikedeboer
Differential Revision: https://phabricator.services.mozilla.com/D34271

--HG--
extra : moz-landing-system : lando
2019-06-19 15:35:15 +00:00
Mike de Boer
acd82282ed Bug 1554076 - Stop relying on the startup module - SessionStartup.jsm - to inform us of the runtime state, which is the responsibility of SessionStore.jsm. r=dao
Differential Revision: https://phabricator.services.mozilla.com/D32734

--HG--
extra : moz-landing-system : lando
2019-05-28 06:46:53 +00:00
Ryan Hunt
f037851489 Bug 1525720, part 5 - Redirect nsIHttpChannel using content process ID instead of nsIRemoteTab. r=valentin
This code currently works for remote subframes assuming that nsIRemoteTab is implemented
by BrowserParent, but will break when nsIRemoteTab is only for a top-level BrowserParent.

What this code really wants is a content process ID to retarget the channel to. This
commit switches the interfaces to pass this around instead of nsIRemoteTab.

Differential Revision: https://phabricator.services.mozilla.com/D31435

--HG--
extra : source : 757b4f595cc4b18ae35483d23edff4896d15d4b1
2019-05-15 12:33:42 -05:00
Gurzau Raul
57f573a6ff Backed out 18 changesets (bug 1525720) for mass failures on Windows platform e.g ProcessPriorityManager.cpp on a CLOSED TREE.
Backed out changeset 1f2e86c2d691 (bug 1525720)
Backed out changeset 9b79caa460a0 (bug 1525720)
Backed out changeset e65cb2d4c5a5 (bug 1525720)
Backed out changeset 99f971a02d87 (bug 1525720)
Backed out changeset d25963c72ff7 (bug 1525720)
Backed out changeset 810b73719871 (bug 1525720)
Backed out changeset ee10a8254481 (bug 1525720)
Backed out changeset 1bcf9f586c55 (bug 1525720)
Backed out changeset d3b2ac8d5ca4 (bug 1525720)
Backed out changeset 697774dd8984 (bug 1525720)
Backed out changeset eadeacbe4483 (bug 1525720)
Backed out changeset 32eeee79d628 (bug 1525720)
Backed out changeset 07678a2fa9e7 (bug 1525720)
Backed out changeset 757b4f595cc4 (bug 1525720)
Backed out changeset b255e0a84e12 (bug 1525720)
Backed out changeset 9a255864f75d (bug 1525720)
Backed out changeset 5f1c1b609ec1 (bug 1525720)
Backed out changeset 00d83f1d02e0 (bug 1525720)
2019-05-23 01:57:16 +03:00
Ryan Hunt
3621e207d9 Bug 1525720, part 5 - Redirect nsIHttpChannel using content process ID instead of nsIRemoteTab. r=valentin
This code currently works for remote subframes assuming that nsIRemoteTab is implemented
by BrowserParent, but will break when nsIRemoteTab is only for a top-level BrowserParent.

What this code really wants is a content process ID to retarget the channel to. This
commit switches the interfaces to pass this around instead of nsIRemoteTab.

Differential Revision: https://phabricator.services.mozilla.com/D31435

--HG--
extra : rebase_source : be3303c2d38d704a6a1817fa45fd76700fae6287
extra : histedit_source : c7bf1e496f4328acc9ee70fcccdff98ea2cce5df
2019-05-15 12:33:42 -05:00
Alphan Chen
2dbd18c6c8 Bug 1549973 - Force tabState flush from C++ listener before tab is closed r=peterv
Differential Revision: https://phabricator.services.mozilla.com/D30475

--HG--
extra : moz-landing-system : lando
2019-05-22 09:06:14 +00:00
Mike de Boer
4ea690eb96 Bug 1543684 - When a session is set to resume anyways, skip analyzing previous crashes and always restore immediately. r=dao
I also made a few gratuitous code formatting cleanups. I hope you don't mind.
We are unable to properly analyze shutdown crashes and deduce the right action
to take when that happened. This leads to surprising occurrences of the
'about:sessionrestore' page shown, especially when a full restore is expected
anyway.

Differential Revision: https://phabricator.services.mozilla.com/D29676

--HG--
extra : moz-landing-system : lando
2019-05-22 09:08:09 +00:00
Julien Cristau
1c6fe6b8d4 Bug 1536465 - remove expiring FX_TAB_REMOTE_NAVIGATION_DELAY_MS telemetry probe. r=mconley
Differential Revision: https://phabricator.services.mozilla.com/D27328

--HG--
extra : rebase_source : 2f8c9ad952dfe9f5772709723a4fdfe0411083ee
2019-05-20 11:57:42 +02:00
Kyle Machulis
d0cadc6c25 Bug 1540839 - Add Cross Origin Opener Policy case for BC preservation; r=nika
If we're doing a process switch due to the cross origin opener policy
being mismatched, we don't want to preserve the browsing context.

Differential Revision: https://phabricator.services.mozilla.com/D26392
2019-05-14 10:51:05 -07:00
Razvan Maries
1be8bab7d1 Backed out 8 changesets (bug 1540839) for build bustages. CLOSED TREE
Backed out changeset f7e477858ab7 (bug 1540839)
Backed out changeset 55e841a0f005 (bug 1540839)
Backed out changeset b71b58e40426 (bug 1540839)
Backed out changeset 484a54613358 (bug 1540839)
Backed out changeset b34c4d71f202 (bug 1540839)
Backed out changeset 8ff2ff524489 (bug 1540839)
Backed out changeset 27492a30286c (bug 1540839)
Backed out changeset f1c35e8e84f6 (bug 1540839)
2019-05-14 04:23:27 +03:00
Kyle Machulis
679ff7a37e Bug 1540839 - Add Cross Origin Opener Policy case for BC preservation; r=nika
If we're doing a process switch due to the cross origin opener policy
being mismatched, we don't want to preserve the browsing context.

Differential Revision: https://phabricator.services.mozilla.com/D26392
2019-05-13 17:58:45 -07:00
Alphan Chen
d12fbd8633 Bug 1474130 - Implement ScrollPosition/Privacy/DocCapability listeners in C++ r=peterv
Differential Revision: https://phabricator.services.mozilla.com/D23057

--HG--
extra : moz-landing-system : lando
2019-05-04 10:42:52 +00:00
Andreea Pavel
afb105189c Backed out changeset b821fc0de45c (bug 1543684) for failing browser_354894_perwindowpb.js on a CLOSED TREE 2019-05-06 19:52:40 +03:00
Mike de Boer
aeb8dbf5af Bug 1543684 - When a session is set to resume anyways, skip analyzing previous crashes and always restore immediately. r=dao
I also made a few gratuitous code formatting cleanups. I hope you don't mind.
We are unable to properly analyze shutdown crashes and deduce the right action
to take when that happened. This leads to surprising occurrences of the
'about:sessionrestore' page shown, especially when a full restore is expected
anyway.

Differential Revision: https://phabricator.services.mozilla.com/D29676

--HG--
extra : moz-landing-system : lando
2019-05-06 15:32:10 +00:00
Nika Layzell
6eb2084136 Bug 1544811 - Use web processes on a per-site basis for fission-enabled windows, r=mconley
This patch introduces a new type of content process, which has a dynamic name.
This type of content process is labeled as `webIsolated=${SITE_ORIGIN}` and is
used within fission-enabled windows.

To enable this, additional information about the fission status of the target
window must be passed into E10SUtils. This was done by updating every call site
manually to pass an extra boolean. A better solution perhaps should be used in
the future.

With this patch enabled, we now perform process switches, but only when
navigating to HTTP URIs. If we navigate to a non-HTTP URI in an iframe with
fission enabled, it will not behave correctly. This must be done in a
follow-up.

Differential Revision: https://phabricator.services.mozilla.com/D29570

--HG--
extra : moz-landing-system : lando
2019-05-03 21:31:57 +00:00
Mike Conley
bff8e0ac63 Bug 1533955 - Show some UI to indicate that a subframe has crashed. r=NeilDeakin
Differential Revision: https://phabricator.services.mozilla.com/D29238

--HG--
extra : moz-landing-system : lando
2019-05-01 20:05:24 +00:00
Ryan Hunt
3675f2449b Bug 1534395 - Rename nsITabParent to nsIRemoteTab. r=nika,mconley
nsITabParent is exposed to frontend code and is generally used as a representation of a remote tab. We could just rename the interface to nsIBrowserParent and worry about it later, but I think it's better to rename the interface to nsIRemoteTab so that we can later work on splitting the interface away from the PBrowser protocol.

Note: Some frontend code refers to a TabParentId. This commit renames this to RemoteTabId. We need to figure out the purpose of TabId with fission.

Differential Revision: https://phabricator.services.mozilla.com/D28132

--HG--
rename : dom/interfaces/base/nsITabParent.idl => dom/interfaces/base/nsIRemoteTab.idl
extra : rebase_source : 9d8a1790a7bb10195ad063644d1a93d63b2afb72
2019-04-09 15:59:37 -05:00
Rob Wu
1af4c55c01 Bug 1544834 - Replace non-test uses of deprecated Array generics r=evilpie,dao
- `Array.forEach` becomes for-of loop or `array.forEach`.
- `Array.slice(a)` or `Array.slice(a, 0)` becomes `Array.from(a)`.
- `Array.map` becomes `Array.from`
- `Array` copy + concatenation becomes Array literal + spread syntax.
- All other `Array.X(a, ...)` become `Array.prototype.X.call` or `Array.from(a).X(...)`

Differential Revision: https://phabricator.services.mozilla.com/D27802

--HG--
extra : moz-landing-system : lando
2019-04-17 19:03:17 +00:00
Nika Layzell
50a5699074 Bug 1539163 - Part 2: Support changing the process of subframes, r=qdot
When a remote type mismatch is found for a subframe, this patch checks if
fission is enabled for that window. If it is, it triggers a process switch,
continuing the load in a new process.

With this patch, subframes will only change process when navigating to a HTML
subframe, and not when navigating to a non-HTML subframe. That will be fixed in
a follow-up. This patch also does not change the remote type selection logic,
so only very limited types of remote iframes are supported.

Differential Revision: https://phabricator.services.mozilla.com/D27513

--HG--
extra : moz-landing-system : lando
2019-04-17 00:53:32 +00:00
Sebastian Streich
879635b243 Bug 1539853 - Throw Exceptions on null Principal within SpeculativeConnectInternal and Handle on Callsite r=ckerschb,Gijs
***
++Linting

Differential Revision: https://phabricator.services.mozilla.com/D25725

--HG--
extra : moz-landing-system : lando
2019-04-02 16:36:09 +00:00
Kyle Machulis
b1414002ac Bug 1524709 - Remove aShouldBeRemote from updateBrowserRemoteness; r=nika
Just set the RemoteType in the options object argument, instead of
doubling up the information.

Differential Revision: https://phabricator.services.mozilla.com/D23250

--HG--
extra : moz-landing-system : lando
2019-03-14 00:51:30 +00:00
Dão Gottwald
fb03a6d522 Backed out changeset 59c8fffe9e41 (bug 1442694) 2019-03-07 11:41:29 +01:00
Dão Gottwald
9d4207731e Backed out changeset 3bd9591627ce (bug 1442694) 2019-03-07 11:31:48 +01:00
Dão Gottwald
14505d9bf1 Backed out changeset 8b3fe0426ffc (bug 1442694) 2019-03-07 11:31:30 +01:00
Dão Gottwald
dd32a46b52 Backed out changeset 764939fcdaf3 (bug 1532498) 2019-03-07 11:31:12 +01:00
Doug Thayer
965b1cacf3 Bug 1532498 - Check userContextId when consuming preopened tabs r=Gijs
This will fix the behavior, I think it might still be worth deliberating
over whether we want to consider non-default userContextId's when tracking
the number of pinned tabs or not. This will be visually correct - the
number of pinned tabs won't change, so things won't be moving around in
the tab bar, but we will throw away the preopened tab once we get further
down in SessionStore.jsm, which is less than ideal.

Differential Revision: https://phabricator.services.mozilla.com/D22195

--HG--
extra : moz-landing-system : lando
2019-03-06 11:50:15 +00:00
Doug Thayer
bfac029223 Bug 1442694 - Fix failures due to removing selected tab r=Gijs
This adds test which reproduce the failure as well as the fix. Essentially,
if we hit the edited case in SessionStore with `tab` equal to `tabbrowser.tabs[t]`,
we remove the tab and then try to pin it, which obviously blows up.

Note: the additional method in SessionStore.jsm was largely to get around
complexity requirements inside restoreWindow. Cleaner solutions welcome.

Differential Revision: https://phabricator.services.mozilla.com/D21383

--HG--
extra : moz-landing-system : lando
2019-03-01 18:29:09 +00:00
Doug Thayer
b189426fb7 Bug 1442694 - Add tests for preopened pinned tabs r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D19463

--HG--
extra : moz-landing-system : lando
2019-03-01 18:29:00 +00:00
Doug Thayer
9790c57933 Bug 1442694 - Preopen pinned tabs before session restore r=Gijs
When we open firefox with pinned tabs, we first paint a window with
one tab open, and then that tab gets displaced after the pinned tabs
come in. This aims to ensure that our first paint contains the
pinned tab, so that we don't have tabs moving around after first
paint.

MozReview-Commit-ID: GC1y6NlgLTd

Differential Revision: https://phabricator.services.mozilla.com/D18742

--HG--
extra : moz-landing-system : lando
2019-03-01 18:28:53 +00:00
shindli
08b7f8eebb Backed out 2 changesets (bug 1442694) for breaking session restores on update a=backout
Backed out changeset f100f8631f78 (bug 1442694)
Backed out changeset 7a20c79a0e12 (bug 1442694)
2019-02-26 18:32:20 +02:00
Noemi Erli
7e23372938 Merge mozilla-central to autoland. a=merge CLOSED TREE
--HG--
extra : rebase_source : de8796d5d7d7079af1b895a2f537371885f8cc6c
2019-02-26 00:09:40 +02:00
Christoph Kerschbaumer
c8bb3d7749 Bug 1529869: Remove the 2 from speculate speculative(Anonymous)Connect2 within nsISpeculativeConnect.idl. r=valentin 2019-02-24 20:26:56 +01:00
Doug Thayer
d2b8144761 Bug 1442694 - Add tests for preopened pinned tabs r=Gijs
Depends on D18742

Differential Revision: https://phabricator.services.mozilla.com/D19463

--HG--
extra : moz-landing-system : lando
2019-02-25 19:19:30 +00:00