Add logic to apply theme colors to Feature Callout based on where it's
going to show. We can use in-content CSS properties for Firefox View and
other themed system pages, but not for PDF.js, nor for any callouts we
might show in the browser chrome in the future. For the browser chrome
in general, we can use the lightweight theme properties directly, in the
same way the chrome frontend does. But PDF.js is a special case, since
although it exists in the chrome, it's meant to appear like it's in the
PDF.js viewer. And the PDF.js viewer has its own theme totally
independent of everything else. So this dynamically applies themes from
different sources.
This also fixes the bug where the PDF.js color scheme could mismatch the
PDF.js viewer if the browser theme and system color scheme don't match,
e.g. where system color scheme is light but a dark theme is installed,
or vice versa. For PDF.js specifically, we can use the
-moz-content-prefers-color-scheme media query to follow the color scheme
as it exists in the PDF.js viewer page instead of the color scheme in
the chrome window where the Feature Callout actually exists.
It also adds or modifies some colors that were previously missing or
different from the prototype, fixes the illegibility of buttons in HCM
and forced colors mode, and makes some other minor color changes.
Differential Revision: https://phabricator.services.mozilla.com/D173088
Add logic to apply theme colors to Feature Callout based on where it's
going to show. We can use in-content CSS properties for Firefox View and
other themed system pages, but not for PDF.js, nor for any callouts we
might show in the browser chrome in the future. For the browser chrome
in general, we can use the lightweight theme properties directly, in the
same way the chrome frontend does. But PDF.js is a special case, since
although it exists in the chrome, it's meant to appear like it's in the
PDF.js viewer. And the PDF.js viewer has its own theme totally
independent of everything else. So this dynamically applies themes from
different sources.
This also fixes the bug where the PDF.js color scheme could mismatch the
PDF.js viewer if the browser theme and system color scheme don't match,
e.g. where system color scheme is light but a dark theme is installed,
or vice versa. For PDF.js specifically, we can use the
-moz-content-prefers-color-scheme media query to follow the color scheme
as it exists in the PDF.js viewer page instead of the color scheme in
the chrome window where the Feature Callout actually exists.
It also adds or modifies some colors that were previously missing or
different from the prototype, fixes the illegibility of buttons in HCM
and forced colors mode, and makes some other minor color changes.
Differential Revision: https://phabricator.services.mozilla.com/D173088
* Keep track of the tab-pickup-container views in TabsSetupFlowManager and their visibility
* Fix visibilitychange handling in tab-pickup-container and add some tests
* Capture a timestamp when a device has been added and there are 0 tabs to show, with at least one visible tab-pickup-container view
* Record telemetry when there are > 0 tabs in these conditions
* Small change to rename the `_waitingForTabs` internal tracking property to `_waitingForNextTabSync` to better clarify its use and meaning
* Use a consistent pattern in some of the existing tests with how we mock SyncedTabs.getRecentTabs
Differential Revision: https://phabricator.services.mozilla.com/D170526
* Keep track of the tab-pickup-container views in TabsSetupFlowManager and their visibility
* Fix visibilitychange handling in tab-pickup-container and add some tests
* Capture a timestamp when a device has been added and there are 0 tabs to show, with at least one visible tab-pickup-container view
* Record telemetry when there are > 0 tabs in these conditions
Differential Revision: https://phabricator.services.mozilla.com/D170526
When called with isLink=true, _getDragTargetTab returns null if the
pointer is around the edges of the tab. This is useful to decide whether
drag-and-drop should create a new tab, or reuse an existing one.
The problem was that _getDropIndex, used when creating a new tab, would
therefore always get a null tab on dragover events, and then fall back
to iterating all tabs sequentially until it would find the right index,
with an expensive getBoundingClientRect() for each tab.
So this patch:
- Renames unclear isLink to a more meaningful ignoreTabSides
- Makes _getDragTargetTab use the native Element#closest instead of
iterating the ancestors manually in JS.
- Makes _getDropIndex always pass ignoreTabSides=false
- Refactors _getDropIndex to never iterate tabs.
- Adds .tab-drop-indicator{pointer-events:none}. This is needed so that
the indicator doesn't become the event target, we want to get the tab
behind it.
Differential Revision: https://phabricator.services.mozilla.com/D166125
* Keep track of the tab-pickup-container views in TabsSetupFlowManager and their visibility
* Fix visibilitychange handling in tab-pickup-container and add some tests
* Capture a timestamp when a device has been added and there are 0 tabs to show, with at least one visible tab-pickup-container view
* Record telemetry when there are > 0 tabs in these conditions
Differential Revision: https://phabricator.services.mozilla.com/D170526
Set up event handlers so that pressing Escape dismisses Feature
Callouts. If an interactive element outside of the Callout is focused,
then the Escape key will not be consumed. Also consolidate all the event
handlers into a single switch statement so we won't need to continue
adding more callback bindings (they were only necessary before
encapsulation was implemented). Also change the names of a couple
formerly pseudo-private methods that we're now referencing externally.
Differential Revision: https://phabricator.services.mozilla.com/D168307
* And synthesize clicks on the fxview button to ensure we're getting the correct window focus and visibility while asserting on the state
* Ensure the lastTabFetch pref is reset at the top of the tests, and in each test
Differential Revision: https://phabricator.services.mozilla.com/D167623