• Jinsuk Kim's avatar
    Android: Generic Java UserData facility · 0ed6308f
    Jinsuk Kim authored
    Java UserDataHost/UserData is modeled after native C++
    SupportsUserData/Data class to allow users to attach random class/data
    to a 'host' class by key. Considering the limitation of Java disallowing
    multiple inheritance, UserData itself is designed as interface, and
    UserDataHost a final class that a host class defines as member variable.
    
    Host class Foo exposes UserDataHost so that the classes to be attached to
    Foo can be managed without Foo actually knowing about them. An object of
    FooBar can be retrieved from UserHostData of Foo by:
    
     public class Foo {
         // Defines the container.
         private final UserDataHost mUserDataHost = new UserDataHost();
    
         public UserDataHost getUserDataHost() {
             return mUserDataHost;
         }
     }
    
     public class FooBar implements UserDataHost.UserData {
    
         public FooBar from(UserDataHost host) {
             FooBar foobar = host.getUserData(FooBar.class);
             // Instantiate FooBar upon the first access.
             return foobar != null ? foobar : host.setUserData(FooBar.class, new FooBar());
         }
     }
    
         Foo foo = new Foo();
         ...
    
         FooBar bar = FooBar.from(foo.getUserDataHost());
    
         ...
    
    The design doc is here: https://goo.gl/2uWDja
    
    The method |destroy| is defined in Userdata interface to have the lifecycle
    entirely under control. Note that it is not *yet* possible to make it
    work for WebView.
    
    Change-Id: Iaae038a2b6577b07328917724c610c4efda9bb2e
    Reviewed-on: https://chromium-review.googlesource.com/1179507Reviewed-by: default avatarTommy Nyquist <nyquist@chromium.org>
    Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#586174}
    0ed6308f
BUILD.gn 114 KB