• Robert Knight's avatar
    Make highlight visibility setting work in a multi-guest world · 7d5ff320
    Robert Knight authored
    Make the client's highlight visibility state work in a sane way in
    scenarios where there are multiple guests, or the main guest frame is not the
    host frame. Previously there were several problems in these scenarios:
    
     - It was unclear which component of the application "owned" the
       highlight visibility state. The state in the sidebar could be changed
       as a result of the `highlightsVisibleChanged` event emitted by a
       Guest, as well as the user toggling highlight controls in the
       sidebar.
    
     - In the sidebar's `open` and `close` methods it directly set the
       highlight visibility in the main guest if the `showHighlights`
       setting was set to `whenSidebarOpen`. This meant that it didn't work
       for guests that were not in the main frame.
    
     - Guest frames could be configured with different `showHighlights`
       settings. In this case it was unclear what should happen.
    
    This commit resolves this by making the `Sidebar` class in the host
    frame the central owner of this state. It handles configuring the
    initial state based on the `showHighlights` configuration setting, and
    reflecting this state to the sidebar application which in turn reflects
    it to guest frames. The initial visibility of highlights in a guest
    frame is synchronized with this state when the guest frame connects to
    the sidebar. This state is updated by the `Sidebar` class when:
    
     - The user toggles the highlight visibility control in the sidebar
     - A new highlight or annotation is created in a guest frame
     - The sidebar opens and closes, if the `showHighlights` configuration
       was set to `whenSidebarOpen`
    
    Additionally the inconsistency of `setHighlightsVisible` vs
    `setVisibleHighlights` in identifier and event names has been resolved by
    using `setHighlightsVisible`/`highlightsVisible` everywhere.
    
    Part of https://github.com/hypothesis/client/issues/3798
    7d5ff320
Name
Last commit
Last update
..
config-func-settings-from-test.js Loading commit data...
index-test.js Loading commit data...
is-browser-extension-test.js Loading commit data...
settings-test.js Loading commit data...
url-from-link-tag-test.js Loading commit data...