| Index: chrome/browser/sessions/tab_restore_service.cc
 | 
| diff --git a/chrome/browser/sessions/tab_restore_service.cc b/chrome/browser/sessions/tab_restore_service.cc
 | 
| index 701b0a30db928c720aa4b1c22b32121937709d97..7d660339af2ed6f65e7ae0e5c466f797e754a7e5 100644
 | 
| --- a/chrome/browser/sessions/tab_restore_service.cc
 | 
| +++ b/chrome/browser/sessions/tab_restore_service.cc
 | 
| @@ -68,7 +68,8 @@ const size_t TabRestoreService::kMaxEntries = 25;
 | 
|  // . When the user closes a tab a command of type
 | 
|  //   kCommandSelectedNavigationInTab is written identifying the tab and
 | 
|  //   the selected index, then a kCommandPinnedState command if the tab was
 | 
| -//   pinned and kCommandSetExtensionAppID if the tab has an app id. This is
 | 
| +//   pinned and kCommandSetExtensionAppID if the tab has an app id and
 | 
| +//   the user agent override if it was using one.  This is
 | 
|  //   followed by any number of kCommandUpdateTabNavigation commands (1 per
 | 
|  //   navigation entry).
 | 
|  // . When the user closes a window a kCommandSelectedNavigationInTab command
 | 
| @@ -83,6 +84,7 @@ static const SessionCommand::id_type kCommandSelectedNavigationInTab = 4;
 | 
|  static const SessionCommand::id_type kCommandPinnedState = 5;
 | 
|  static const SessionCommand::id_type kCommandSetExtensionAppID = 6;
 | 
|  static const SessionCommand::id_type kCommandSetWindowAppName = 7;
 | 
| +static const SessionCommand::id_type kCommandSetTabUserAgentOverride = 8;
 | 
|  
 | 
|  // Number of entries (not commands) before we clobber the file and write
 | 
|  // everything.
 | 
| @@ -686,6 +688,12 @@ void TabRestoreService::ScheduleCommandsForTab(const Tab& tab,
 | 
|                                            tab.extension_app_id));
 | 
|    }
 | 
|  
 | 
| +  if (!tab.user_agent_override.empty()) {
 | 
| +    ScheduleCommand(
 | 
| +        CreateSetTabUserAgentOverrideCommand(kCommandSetTabUserAgentOverride,
 | 
| +                                             tab.id, tab.user_agent_override));
 | 
| +  }
 | 
| +
 | 
|    // Then write the navigations.
 | 
|    for (int i = first_index_to_persist, wrote_count = 0;
 | 
|         i < max_index && wrote_count < 2 * max_persist_navigation_count; ++i) {
 | 
| @@ -948,6 +956,21 @@ void TabRestoreService::CreateEntriesFromCommands(
 | 
|          break;
 | 
|        }
 | 
|  
 | 
| +      case kCommandSetTabUserAgentOverride: {
 | 
| +        if (!current_tab) {
 | 
| +          // Should be in a tab when we get this.
 | 
| +          return;
 | 
| +        }
 | 
| +        SessionID::id_type tab_id;
 | 
| +        std::string user_agent_override;
 | 
| +        if (!RestoreSetTabUserAgentOverrideCommand(command, &tab_id,
 | 
| +                                                   &user_agent_override)) {
 | 
| +          return;
 | 
| +        }
 | 
| +        current_tab->user_agent_override.swap(user_agent_override);
 | 
| +        break;
 | 
| +      }
 | 
| +
 | 
|        default:
 | 
|          // Unknown type, usually indicates corruption of file. Ignore it.
 | 
|          return;
 | 
| 
 |