| Index: chrome/browser/sync/profile_sync_service.h | 
| diff --git a/chrome/browser/sync/profile_sync_service.h b/chrome/browser/sync/profile_sync_service.h | 
| index 05aa410b3da09174ed2ff9a1d4deae2c9fadef1e..904cb8e4f0e67a7a6ed17a2430e7be6f88d80f76 100644 | 
| --- a/chrome/browser/sync/profile_sync_service.h | 
| +++ b/chrome/browser/sync/profile_sync_service.h | 
| @@ -197,6 +197,7 @@ class ProfileSyncService : public browser_sync::SyncFrontend, | 
| virtual void OnClearServerDataSucceeded(); | 
| virtual void OnPassphraseRequired(bool for_decryption); | 
| virtual void OnPassphraseAccepted(); | 
| +  virtual void OnPassphraseFailed(); | 
| virtual void OnEncryptionComplete( | 
| const syncable::ModelTypeSet& encrypted_types); | 
| virtual void OnMigrationNeededForTypes( | 
| @@ -286,6 +287,10 @@ class ProfileSyncService : public browser_sync::SyncFrontend, | 
| return observed_passphrase_required_; | 
| } | 
|  | 
| +  bool observed_passphrase_failed() const { | 
| +    return observed_passphrase_failed_; | 
| +  } | 
| + | 
| bool passphrase_required_for_decryption() const { | 
| return passphrase_required_for_decryption_; | 
| } | 
| @@ -513,6 +518,10 @@ class ProfileSyncService : public browser_sync::SyncFrontend, | 
| // backend, telling us that it is safe to send a passphrase down ASAP. | 
| bool observed_passphrase_required_; | 
|  | 
| +  // Keeps track of whether the cryptographer's pending keys were decrypted with | 
| +  // the cached passphrase or not. If not, a new passphrase is required. | 
| +  bool observed_passphrase_failed_; | 
| + | 
| // Was the last SYNC_PASSPHRASE_REQUIRED notification sent because it | 
| // was required for decryption? | 
| bool passphrase_required_for_decryption_; | 
|  |