| Index: remoting/protocol/pairing_registry.h
 | 
| diff --git a/remoting/protocol/pairing_registry.h b/remoting/protocol/pairing_registry.h
 | 
| index 354452438a046f7d7b7d5a29415ceb370aa1a961..0938d4e4ee7fbe5b18ea3c457c725b54363b70b5 100644
 | 
| --- a/remoting/protocol/pairing_registry.h
 | 
| +++ b/remoting/protocol/pairing_registry.h
 | 
| @@ -17,9 +17,6 @@
 | 
|  namespace remoting {
 | 
|  namespace protocol {
 | 
|  
 | 
| -// TODO(jamiewalch): This class is little more than a wrapper around the
 | 
| -// Pairing and Delegate classes. Refactor it away.
 | 
| -
 | 
|  // PairingRegistry holds information about paired clients to support
 | 
|  // PIN-less authentication. For each paired client, the registry holds
 | 
|  // the following information:
 | 
| @@ -62,62 +59,63 @@ class PairingRegistry : public base::RefCountedThreadSafe<PairingRegistry>,
 | 
|    typedef std::map<std::string, Pairing> PairedClients;
 | 
|  
 | 
|    // Delegate callbacks.
 | 
| -  typedef base::Callback<void(Pairing client_information)> GetPairingCallback;
 | 
| -  typedef base::Callback<void(bool success)> AddPairingCallback;
 | 
| +  typedef base::Callback<void(const std::string& pairings_json)> LoadCallback;
 | 
| +  typedef base::Callback<void(bool success)> SaveCallback;
 | 
| +  typedef base::Callback<void(Pairing pariring)> GetPairingCallback;
 | 
|  
 | 
|    // Interface representing the persistent storage back-end.
 | 
|    class Delegate {
 | 
|     public:
 | 
|      virtual ~Delegate() {}
 | 
|  
 | 
| -    // Add pairing information to persistent storage. If a non-NULL callback
 | 
| -    // is provided, invoke it on completion to indicate success or failure.
 | 
| -    // Must not block.
 | 
| -    //
 | 
| -    // TODO(jamiewalch): Plumb the callback into the RequestPairing flow so
 | 
| -    // that the client isn't sent the pairing information until it has been
 | 
| -    // saved.
 | 
| -    virtual void AddPairing(const Pairing& new_paired_client,
 | 
| -                            const AddPairingCallback& callback) = 0;
 | 
| -
 | 
| -    // Retrieve the Pairing for the specified client id. If none is found,
 | 
| -    // invoke the callback with a default pairing. Must not block.
 | 
| -    virtual void GetPairing(const std::string& client_id,
 | 
| -                            const GetPairingCallback& callback) = 0;
 | 
| +    // Save JSON-encoded pairing information to persistent storage. If
 | 
| +    // a non-NULL callback is provided, invoke it on completion to
 | 
| +    // indicate success or failure. Must not block.
 | 
| +    virtual void Save(const std::string& pairings_json,
 | 
| +                      const SaveCallback& callback) = 0;
 | 
| +
 | 
| +    // Retrieve the JSON-encoded pairing information from persistent
 | 
| +    // storage. Must not block.
 | 
| +    virtual void Load(const LoadCallback& callback) = 0;
 | 
|    };
 | 
|  
 | 
|    explicit PairingRegistry(scoped_ptr<Delegate> delegate);
 | 
|  
 | 
| -  // Create a pairing for a new client and save it to disk.
 | 
| +  // Creates a pairing for a new client and saves it to disk.
 | 
| +  //
 | 
| +  // TODO(jamiewalch): Plumb the Save callback into the RequestPairing flow
 | 
| +  // so that the client isn't sent the pairing information until it has been
 | 
| +  // saved.
 | 
|    Pairing CreatePairing(const std::string& client_name);
 | 
|  
 | 
| -  // Get the pairing for the specified client id. See the corresponding
 | 
| -  // Delegate method for details.
 | 
| +  // Gets the pairing for the specified client id. See the corresponding
 | 
| +  // Delegate method for details. If none is found, the callback is invoked
 | 
| +  // with an invalid Pairing.
 | 
|    void GetPairing(const std::string& client_id,
 | 
|                    const GetPairingCallback& callback);
 | 
|  
 | 
|   private:
 | 
| +  FRIEND_TEST_ALL_PREFIXES(PairingRegistryTest, AddPairing);
 | 
| +  friend class NegotiatingAuthenticatorTest;
 | 
|    friend class base::RefCountedThreadSafe<PairingRegistry>;
 | 
|  
 | 
|    virtual ~PairingRegistry();
 | 
|  
 | 
| +  void AddPairing(const Pairing& pairing);;
 | 
| +  void MergePairingAndSave(const Pairing& pairing,
 | 
| +                           const std::string& pairings_json);
 | 
| +  void DoGetPairing(const std::string& client_id,
 | 
| +                    const GetPairingCallback& callback,
 | 
| +                    const std::string& pairings_json);
 | 
| +
 | 
| +  static PairedClients DecodeJson(const std::string& pairings_json);
 | 
| +  static std::string EncodeJson(const PairedClients& clients);
 | 
| +
 | 
|    scoped_ptr<Delegate> delegate_;
 | 
|  
 | 
|    DISALLOW_COPY_AND_ASSIGN(PairingRegistry);
 | 
|  };
 | 
|  
 | 
| -// Temporary delegate that just logs NOTIMPLEMENTED for Load/Save.
 | 
| -// TODO(jamiewalch): Delete once Delegates are implemented for all platforms.
 | 
| -class NotImplementedPairingRegistryDelegate : public PairingRegistry::Delegate {
 | 
| - public:
 | 
| -  virtual void AddPairing(
 | 
| -      const PairingRegistry::Pairing& paired_clients,
 | 
| -      const PairingRegistry::AddPairingCallback& callback) OVERRIDE;
 | 
| -  virtual void GetPairing(
 | 
| -      const std::string& client_id,
 | 
| -      const PairingRegistry::GetPairingCallback& callback) OVERRIDE;
 | 
| -};
 | 
| -
 | 
|  }  // namespace protocol
 | 
|  }  // namespace remoting
 | 
|  
 | 
| 
 |