Commit graph

92 commits

Author SHA1 Message Date
Emilio Cobos Álvarez
4e978b56b5 Bug 1689816 - Implement <tabpanels> and <deck> without XUL layout. r=Gijs,Jamie,morgan,preferences-reviewers,mconley,TYLin
Gijs for front-end bits, layout for the new CSS properties and the
removal of nsDeckFrame / nsStackLayout, Jamie and Morgan for the a11y
changes.

As discussed in the bug, the main tricky part here is handling a11y
correctly. For <deck>, that's trivial (just use `visibility: hidden` to
hide the panels visually, while removing the unselected panels from the
a11y tree).

For <tabpanels> however we need to do something special. We do want to
hide stuff visually, but we want to preserve the contents in the a11y
tree.

For that, the easiest fix is introducing a new privileged CSS property
(-moz-subtree-hidden-only-visually), which takes care of not painting
the frame, but marks stuff offscreen in the accessibility tree. This is
not intended to be a property used widely.

Other than that, the changes are relatively straight-forward, though
some of the accessible/mac changes I could get a sanity-check on.

Differential Revision: https://phabricator.services.mozilla.com/D157875
2022-09-27 04:18:16 +00:00
Marian-Vasile Laza
f54a464c90 Backed out changeset 2f74f8f2ed19 (bug 1689816) for causing reftest failures on skip-ink-multiline-position.html. 2022-09-26 23:24:03 +03:00
Emilio Cobos Álvarez
f875681246 Bug 1689816 - Implement <tabpanels> and <deck> without XUL layout. r=Gijs,Jamie,morgan,preferences-reviewers,mconley,TYLin
Gijs for front-end bits, layout for the new CSS properties and the
removal of nsDeckFrame / nsStackLayout, Jamie and Morgan for the a11y
changes.

As discussed in the bug, the main tricky part here is handling a11y
correctly. For <deck>, that's trivial (just use `visibility: hidden` to
hide the panels visually, while removing the unselected panels from the
a11y tree).

For <tabpanels> however we need to do something special. We do want to
hide stuff visually, but we want to preserve the contents in the a11y
tree.

For that, the easiest fix is introducing a new privileged CSS property
(-moz-subtree-hidden-only-visually), which takes care of not painting
the frame, but marks stuff offscreen in the accessibility tree. This is
not intended to be a property used widely.

Other than that, the changes are relatively straight-forward, though
some of the accessible/mac changes I could get a sanity-check on.

Differential Revision: https://phabricator.services.mozilla.com/D157875
2022-09-26 17:40:30 +00:00
Evan
f71e1c1af2 Bug 1788783 -Converted Picture in Picture JSM modules to ESMs. r=kpatenio
Differential Revision: https://phabricator.services.mozilla.com/D157039
2022-09-23 18:11:48 +00:00
Emilio Cobos Álvarez
0170e759f8 Bug 1779559 - Do this in toolkit instead. r=Gijs
This simplifies a bit the tabbrowser/tab switcher code, and makes it
work in all windows.

The WPT failures are due to bug 1780212.

Differential Revision: https://phabricator.services.mozilla.com/D151822
2022-07-19 19:25:48 +00:00
Cristian Tuns
02571b9d37 Backed out 5 changesets (bug 1779559) for causing wpt failures on unload-bubbles.html CLOSED TREE
Backed out changeset fbb29df4aa9e (bug 1779559)
Backed out changeset eab896a61170 (bug 1779559)
Backed out changeset 645bdd59bb99 (bug 1779559)
Backed out changeset 23fe4f24d483 (bug 1779559)
Backed out changeset a68a015349ed (bug 1779559)
2022-07-19 13:27:32 -04:00
Emilio Cobos Álvarez
e08e5475c4 Bug 1779559 - Do this in toolkit instead. r=Gijs
This simplifies a bit the tabbrowser/tab switcher code, and makes it
work in all windows.

Differential Revision: https://phabricator.services.mozilla.com/D151822
2022-07-19 09:43:06 +00:00
Tooru Fujisawa
54623364da Bug 1777486 - Part 2: Migrate XPCOMUtils.jsm consumers with automatic migration. r=webdriver-reviewers,geckoview-reviewers,preferences-reviewers,application-update-reviewers,pip-reviewers,kmag,owlish,whimboo
Differential Revision: https://phabricator.services.mozilla.com/D151214
2022-07-12 04:21:34 +00:00
Andreea Pavel
7738a75fdd Backed out 11 changesets (Bug 1777486) for failing bc at browser_startup.js on a CLOSED TREE
Backed out changeset b6c4c386f1a6 (Bug 1777486)
Backed out changeset 195cc2de8433 (Bug 1777486)
Backed out changeset 20c746fb1648 (Bug 1777486)
Backed out changeset d5fd8173d62d (Bug 1777486)
Backed out changeset 6d758fab5a3e (Bug 1777486)
Backed out changeset e938b601ba15 (Bug 1777486)
Backed out changeset 0c4ea0b9416b (Bug 1777486)
Backed out changeset 0559c53cc668 (Bug 1777486)
Backed out changeset eea573d3a9f9 (Bug 1777486)
Backed out changeset 9ce3a6496a49 (bug 1777486)
Backed out changeset b0867652fc48 (bug 1777486)
2022-07-11 22:24:40 +03:00
Tooru Fujisawa
8cd6ed7409 Bug 1777486 - Part 2: Migrate XPCOMUtils.jsm consumers with automatic migration. r=webdriver-reviewers,geckoview-reviewers,preferences-reviewers,application-update-reviewers,pip-reviewers,kmag,owlish,whimboo
Differential Revision: https://phabricator.services.mozilla.com/D151214
2022-07-11 15:09:13 +00:00
Tooru Fujisawa
f3a8c52c53 Bug 1667455 - Part 4: Stop importing Services.jsm from JSM. r=kmag,webdriver-reviewers,perftest-reviewers,webcompat-reviewers,geckoview-reviewers,application-update-reviewers,pip-reviewers,twisniewski,devtools-reviewers,m_kato,jdescottes,ochameau,mconley,sfoster,AlexandruIonescu
Differential Revision: https://phabricator.services.mozilla.com/D150893
2022-07-11 12:41:50 +00:00
Tooru Fujisawa
abf807a67a Bug 1772007 - Part 2: Use plain object for lazy getter in browser/modules/. r=mossop
Differential Revision: https://phabricator.services.mozilla.com/D148008
2022-06-06 18:59:45 +00:00
Tooru Fujisawa
6b0608c9bd Bug 1772351 - Part 3: Stop calling XPCOMUtils.defineLazyModuleGetters for AppConstants. r=florian,webdriver-reviewers,whimboo,robwu
Differential Revision: https://phabricator.services.mozilla.com/D148166
2022-06-06 04:42:09 +00:00
Tooru Fujisawa
f7650958c8 Bug 1772313 - Part 7: Stop calling XPCOMUtils.defineLazyModuleGetters for Services. r=kmag,webdriver-reviewers,whimboo
Differential Revision: https://phabricator.services.mozilla.com/D148160
2022-06-06 04:42:06 +00:00
Molnar Sandor
77402a5caa Backed out 15 changesets (bug 1772313, bug 1772351, bug 1772360) for causing xpc failures in telemetry/tests/unit/test_SocketScalars.js CLOSED TREE
Backed out changeset c8b0a2ed239e (bug 1772360)
Backed out changeset 1922adad6abe (bug 1772351)
Backed out changeset 6d3634cce489 (bug 1772351)
Backed out changeset f03968a9d053 (bug 1772351)
Backed out changeset e7a38ef90fe4 (bug 1772351)
Backed out changeset b389e7654771 (bug 1772313)
Backed out changeset 59a33598ff51 (bug 1772313)
Backed out changeset ab60885a8a93 (bug 1772313)
Backed out changeset aad8efac9d05 (bug 1772313)
Backed out changeset 4378e519a8e7 (bug 1772313)
Backed out changeset 302ac54741f8 (bug 1772313)
Backed out changeset 74c59f9fd51c (bug 1772313)
Backed out changeset 575fb877c56c (bug 1772313)
Backed out changeset 2eaa68f10b19 (bug 1772313)
Backed out changeset 4a8b3ba193dc (bug 1772313)
2022-06-06 07:04:25 +03:00
Tooru Fujisawa
b200384ddb Bug 1772351 - Part 3: Stop calling XPCOMUtils.defineLazyModuleGetters for AppConstants. r=florian,webdriver-reviewers,whimboo,robwu
Differential Revision: https://phabricator.services.mozilla.com/D148166
2022-06-06 02:49:13 +00:00
Tooru Fujisawa
fc45e50920 Bug 1772313 - Part 7: Stop calling XPCOMUtils.defineLazyModuleGetters for Services. r=kmag,webdriver-reviewers,whimboo
Differential Revision: https://phabricator.services.mozilla.com/D148160
2022-06-06 02:49:10 +00:00
Emilio Cobos Álvarez
8992ef0fda Bug 1767855 - Make tab warming use the process priority hint. r=mconley
Differential Revision: https://phabricator.services.mozilla.com/D145501
2022-05-26 16:25:13 +00:00
Niklas Baumgardner
8df33a3b36 Bug 1755748 - Keep PiP tabs in active state. r=mconley,dthayer
Differential Revision: https://phabricator.services.mozilla.com/D140394
2022-03-10 23:33:26 +00:00
Mike Conley
f6d6ef9e42 Bug 1745267 - Add new TabSwitched event to AsyncTabSwitcher. r=dthayer
Differential Revision: https://phabricator.services.mozilla.com/D133672
2021-12-14 14:33:11 +00:00
Csoregi Natalia
b08ae4fb50 Backed out changeset ab94b17b8da3 (bug 1646561) for failures on browser_abort_visibility.js. CLOSED TREE 2021-03-16 20:33:34 +02:00
Steven MacLeod
46d2914958 Bug 1646561 - Stop using DocShell::GetVisibility in nsFocusManager. r=emilio,mconley
We stop checking for the tab state to be `STATE_LOADED` since it
messes up initial focus. Instead, we directly check if the tab
is warming, since that was the intention of this check, AFAICT.
See Bug 1397426 for where this was introduced.

Differential Revision: https://phabricator.services.mozilla.com/D108452
2021-03-16 15:36:55 +00:00
Florian Quèze
0a6859916e Bug 1647238 - Replace Services.profiler.AddMarker with ChromeUtils.addProfilerMarker in browser/, r=Gijs.
Depends on D80651

Differential Revision: https://phabricator.services.mozilla.com/D80652
2020-06-23 13:44:48 +00:00
Marco Bonardo
459a5ab5b4 Bug 1601052 - Wait for both TabSelect and urlbar focus changes from the tab switcher. r=dao
The Async Tab Switcher seems to fire the TabSelect event in parallel with focus
changes, making the behavior non-predictable, because we need a stable situation
where both events happened.

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

--HG--
extra : moz-landing-system : lando
2020-01-31 15:10:27 +00:00
Matt Woodrow
dc7b5810bc Bug 1598516 - Remove isLocalAboutURI since all about: URIs are local. r=Gijs
With DocumentChannel, the 'URI' of the channel that we proxy for RemoteWebProgress doesn't have the resolved URI, and reports the about: version instead.

All about: URIs are local these days, so we can just check for that scheme directly, and simplify the code.

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

--HG--
extra : moz-landing-system : lando
2019-12-03 23:55:21 +00:00
Bogdan Tara
0108d839e9 Backed out 8 changesets (bug 1598516) for run startup hangs CLOSED TREE
Backed out changeset bc0035aa57fe (bug 1598516)
Backed out changeset 33603b723337 (bug 1598516)
Backed out changeset 31c11dd9146d (bug 1598516)
Backed out changeset 4e269a638350 (bug 1598516)
Backed out changeset 76b86080c868 (bug 1598516)
Backed out changeset b6f84b01cbd9 (bug 1598516)
Backed out changeset 74d136798dd3 (bug 1598516)
Backed out changeset bf370938463e (bug 1598516)
2019-12-04 00:48:17 +02:00
Matt Woodrow
c10f854a76 Bug 1598516 - Remove isLocalAboutURI since all about: URIs are local. r=Gijs
With DocumentChannel, the 'URI' of the channel that we proxy for RemoteWebProgress doesn't have the resolved URI, and reports the about: version instead.

All about: URIs are local these days, so we can just check for that scheme directly, and simplify the code.

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

--HG--
extra : moz-landing-system : lando
2019-12-03 20:43:59 +00:00
Gurzau Raul
2e8639b3b4 Backed out 8 changesets (bug 1598516) for build bustage at ParentChannelListener.cpp on a CLOSED TREE.
Backed out changeset 7ac1b091aa5f (bug 1598516)
Backed out changeset b62c5b49b91c (bug 1598516)
Backed out changeset e48c0ce38498 (bug 1598516)
Backed out changeset cc2599921b5e (bug 1598516)
Backed out changeset 0a0f80b0b278 (bug 1598516)
Backed out changeset 1dc19a039cab (bug 1598516)
Backed out changeset b664c8af6e2d (bug 1598516)
Backed out changeset 943b440179b9 (bug 1598516)
2019-12-03 21:48:14 +02:00
Matt Woodrow
d4fc6bca1b Bug 1598516 - Remove isLocalAboutURI since all about: URIs are local. r=Gijs
With DocumentChannel, the 'URI' of the channel that we proxy for RemoteWebProgress doesn't have the resolved URI, and reports the about: version instead.

All about: URIs are local these days, so we can just check for that scheme directly, and simplify the code.

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

--HG--
extra : moz-landing-system : lando
2019-12-03 06:20:51 +00:00
Coroiu Cristina
b55f6bda39 Backed out 6 changesets (bug 1598516) for Mn and pgo failures on a CLOSED TREE
Backed out changeset 63a84cdfd937 (bug 1598516)
Backed out changeset 894aaa4bc62e (bug 1598516)
Backed out changeset e19ada9e8b30 (bug 1598516)
Backed out changeset 72f2256ae171 (bug 1598516)
Backed out changeset 6ba74ff735ba (bug 1598516)
Backed out changeset b235cf22b0e4 (bug 1598516)
2019-11-26 04:40:35 +02:00
Matt Woodrow
d537b5fdb6 Bug 1598516 - Remove isLocalAboutURI since all about: URIs are local. r=Gijs
With DocumentChannel, the 'URI' of the channel that we proxy for RemoteWebProgress doesn't have the resolved URI, and reports the about: version instead.

All about: URIs are local these days, so we can just check for that scheme directly, and simplify the code.

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

--HG--
extra : moz-landing-system : lando
2019-11-25 23:39:06 +00:00
Doug Thayer
94a1e48dad Bug 1583651 - Add logging indicator for maybeVisibleTabs r=mconley
This is just sometimes relevant for debugging things.

Depends on D47350

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

--HG--
extra : moz-landing-system : lando
2019-09-27 19:17:25 +00:00
Doug Thayer
4d7fc6146d Bug 1583651 - Pull Telemetry code out into helpers r=mconley
This just pulls chunks of TelemetryStopwatch and similar code,
which often eats up several lines, into some helper functions.
This should just help reduce the cognitive load of reading this
code.

Depends on D47349

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

--HG--
extra : moz-landing-system : lando
2019-09-27 19:23:12 +00:00
Doug Thayer
ac9c79f25f Bug 1583651 - Send all pre/postActions through handleEvent r=mconley
This way we ensure that the reentrancy guard always stays in effect.
It should just be a little easier to reason about everything if it's
all channeled through the same place.

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

--HG--
extra : moz-landing-system : lando
2019-09-27 19:12:03 +00:00
Emilio Cobos Álvarez
69d84b1151 Bug 1582042 - Remove nsIRemoteTab.forceRepaint(). r=mconley
It's useless if the tab is already visible (i.e., has renderLayers=true), per
the previous patches, and that's the only point at which it gets called.

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

--HG--
extra : moz-landing-system : lando
2019-09-26 22:11:50 +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
Doug Thayer
7d54759c16 Bug 1575610 - Ensure we only show spinner after 400ms r=mconley
I haven't been able to work out a reason why we should show the
spinner before this.loadTimer is cleared. All this does is allow
for random reordering of events to sometimes show a spinner early.
This should ideally just make the spinner logic more rubust to
event ordering changes, without sacrificing visibility into tab
switch timings.

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

--HG--
extra : moz-landing-system : lando
2019-09-05 20:02:45 +00:00
Doug Thayer
4d29441819 Bug 1575610 - Revamp AsyncTabSwitcher.jsm logging r=mconley
This just adds a bit of information to the AsyncTabSwitcher's
logging and cleans up the display to make it quicker to find
what changed, especially with large numbers of tabs. The bit of
new information that I'm particularly interested in is what
event triggered a particular update - so now every time we call
postActions, we include the name of the event.

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

--HG--
extra : moz-landing-system : lando
2019-09-05 20:02:36 +00:00
Kris Maglione
a10c1a6f0e Bug 1570097: Part 2 - Add missing try-finally in AsyncTabSwitcher. r=mconley
With the current code, if any event handler throws, `_processing` remains
true, and every subsequent event goes into an infinite loop dispatching 0ms
timeouts to run on the next tick.

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

--HG--
extra : moz-landing-system : lando
2019-07-30 19:26:56 +00:00
Victor Porof
af7d1d3b67 Bug 1561435 - Format browser/modules/, a=automatic-formatting
# ignore-this-changeset

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

--HG--
extra : source : f3c632037a1064c41b1f8b02f477c854b2fb4362
2019-07-05 09:55:19 +02:00
Ryan Hunt
d6509bb237 Bug 1534395 - Rename TabChild to BrowserChild. r=nika
This commit renames TabChild to BrowserChild.

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

--HG--
rename : dom/base/InProcessTabChildMessageManager.cpp => dom/base/InProcessBrowserChildMessageManager.cpp
rename : dom/base/InProcessTabChildMessageManager.h => dom/base/InProcessBrowserChildMessageManager.h
rename : dom/ipc/TabChild.cpp => dom/ipc/BrowserChild.cpp
rename : dom/ipc/TabChild.h => dom/ipc/BrowserChild.h
extra : rebase_source : e7fcfb845a971a2760e73d517e24da18ce2551b5
extra : histedit_source : d1991334ccb107fe56e478865f22fd97b041a317
2019-04-09 17:39:01 -05: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
Kris Maglione
e930b89c34 Bug 1514594: Part 3 - Change ChromeUtils.import API.
***
Bug 1514594: Part 3a - Change ChromeUtils.import to return an exports object; not pollute global. r=mccr8

This changes the behavior of ChromeUtils.import() to return an exports object,
rather than a module global, in all cases except when `null` is passed as a
second argument, and changes the default behavior not to pollute the global
scope with the module's exports. Thus, the following code written for the old
model:

  ChromeUtils.import("resource://gre/modules/Services.jsm");

is approximately the same as the following, in the new model:

  var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");

Since the two behaviors are mutually incompatible, this patch will land with a
scripted rewrite to update all existing callers to use the new model rather
than the old.
***
Bug 1514594: Part 3b - Mass rewrite all JS code to use the new ChromeUtils.import API. rs=Gijs

This was done using the followng script:

https://bitbucket.org/kmaglione/m-c-rewrites/src/tip/processors/cu-import-exports.jsm
***
Bug 1514594: Part 3c - Update ESLint plugin for ChromeUtils.import API changes. r=Standard8

Differential Revision: https://phabricator.services.mozilla.com/D16747
***
Bug 1514594: Part 3d - Remove/fix hundreds of duplicate imports from sync tests. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D16748
***
Bug 1514594: Part 3e - Remove no-op ChromeUtils.import() calls. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D16749
***
Bug 1514594: Part 3f.1 - Cleanup various test corner cases after mass rewrite. r=Gijs
***
Bug 1514594: Part 3f.2 - Cleanup various non-test corner cases after mass rewrite. r=Gijs

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

--HG--
extra : rebase_source : 359574ee3064c90f33bf36c2ebe3159a24cc8895
extra : histedit_source : b93c8f42808b1599f9122d7842d2c0b3e656a594%2C64a3a4e3359dc889e2ab2b49461bab9e27fc10a7
2019-01-17 10:18:31 -08:00
Dão Gottwald
65b52f7de5 Bug 1510418 - Use TelemetryStopwatch.running instead of custom _tabSwitchStopWatchRunning flag. r=Ehsan
Differential Revision: https://phabricator.services.mozilla.com/D13126

--HG--
extra : moz-landing-system : lando
2018-11-27 21:53:13 +00:00
Ehsan Akhgari
31a9e2ed4f Bug 1503074 follow-up: Address review comments 2018-11-27 14:48:23 -05:00
Ehsan Akhgari
923b4f06ad Bug 1503074 - Only touch the FX_TAB_SWITCH_COMPOSITE_E10S_MS stopwatch when we have actually started it in the past
Differential Revision: https://phabricator.services.mozilla.com/D12966

--HG--
extra : moz-landing-system : lando
2018-11-26 19:16:09 +00:00
Kris Maglione
ade8c9ede8 Bug 1482091: Part 2 - Remove TelemetryStopwatch.jsm in favor of native implementation. r=chutten
Differential Revision: https://phabricator.services.mozilla.com/D9888

--HG--
extra : source : afd0a13bcfff4c92ad2497ec687f466484481667
extra : amend_source : 501bca3f94a0cb0c8bec1f30d0b3f64a50b04e48
extra : intermediate-source : bc03f101937e373fdaca735f3f356960a5239bc0
2018-10-25 19:04:01 -07:00
arthur.iakab
0c81738411 Backed out 2 changesets (bug 1482091) for bc failures on browser_domFullscreen_fullscreenMode.js
Backed out changeset bc03f101937e (bug 1482091)
Backed out changeset 28a19b7290ab (bug 1482091)
2018-11-03 01:08:36 +02:00
Kris Maglione
7fa01216a4 Bug 1482091: Part 2 - Remove TelemetryStopwatch.jsm in favor of native implementation. r=chutten
Differential Revision: https://phabricator.services.mozilla.com/D9888

--HG--
extra : source : afd0a13bcfff4c92ad2497ec687f466484481667
extra : amend_source : bf22d8e9ce5c081902bd5c75b892cc434a167300
2018-10-25 19:04:01 -07:00