• Elly Fong-Jones's avatar
    views: add WidgetDelegate::SetContentsView · 1a6a4ddc
    Elly Fong-Jones authored
    This change adds two new methods to WidgetDelegate, both of which allow
    setting the WidgetDelegate's contents view, thus removing the need to
    override GetContentsView(). The two new methods are:
    
    * SetContentsView(unique_ptr<View>), which takes ownership of the given
      View
    * SetContentsView(View*), which doesn't
    
    Each method can only be used with the appropriate ownership protocol, so
    SetContentsView(unique_ptr<View>) will DCHECK if the provided view is
    owned_by_client(), and vice versa for SetContentsView(View*). This
    effectively forces clients into one of these two ownership protocols and
    away from the "sometimes owning" pointer semantics of overriding
    GetContentsView().
    
    This is part 2 of the following plan:
    1) Introduce WidgetDelegate::TransferOwnershipOfContentsView() and
       migrate to it in places that are trying to take ownership
    2) Introduce WidgetDelegate::SetContentsView(), which will either:
       a. Store the provided view in a unique_ptr, if it is not owned
          by client, or
       b. Store the provided view in a raw pointer, if it is owned by
          client
    3) Replace all existing overrides of GetContentsView() with uses of
       SetContentsView()
    4) Require that !owned_by_client() in SetContentsView(), which will
       likely require intense surgery of client classes
    5) Have SetContentsView() take and TransferOwnershipOfContentsView()
       return a unique_ptr<View> rather than a View*
    as laid out in 1206dbae.
    
    Bug: 1075649
    Change-Id: Ifa35af1d87ad958a7d544ed74d6b1f980e416463
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2449919
    Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
    Reviewed-by: default avatarPeter Boström <pbos@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#814274}
    1a6a4ddc
BUILD.gn 45.3 KB