|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "ios/web/shell/shell_browser_state.h" | 
|  |  | 
|  | #include "base/base_paths.h" | 
|  | #include "base/files/file_path.h" | 
|  | #include "base/message_loop/message_loop.h" | 
|  | #include "base/path_service.h" | 
|  | #include "base/threading/thread_restrictions.h" | 
|  | #include "ios/web/public/web_thread.h" | 
|  | #include "ios/web/shell/shell_url_request_context_getter.h" | 
|  | #include "services/test/user_id/user_id_service.h" | 
|  |  | 
|  | #if !defined(__has_feature) || !__has_feature(objc_arc) | 
|  | #error "This file requires ARC support." | 
|  | #endif | 
|  |  | 
|  | namespace web { | 
|  |  | 
|  | ShellBrowserState::ShellBrowserState() : BrowserState() { | 
|  | CHECK(PathService::Get(base::DIR_APP_DATA, &path_)); | 
|  |  | 
|  | request_context_getter_ = new ShellURLRequestContextGetter( | 
|  | GetStatePath(), | 
|  | web::WebThread::GetTaskRunnerForThread(web::WebThread::IO)); | 
|  |  | 
|  | BrowserState::Initialize(this, path_); | 
|  | } | 
|  |  | 
|  | ShellBrowserState::~ShellBrowserState() { | 
|  | } | 
|  |  | 
|  | bool ShellBrowserState::IsOffTheRecord() const { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | base::FilePath ShellBrowserState::GetStatePath() const { | 
|  | return path_; | 
|  | } | 
|  |  | 
|  | net::URLRequestContextGetter* ShellBrowserState::GetRequestContext() { | 
|  | return request_context_getter_.get(); | 
|  | } | 
|  |  | 
|  | void ShellBrowserState::RegisterServices(StaticServiceMap* services) { | 
|  | service_manager::EmbeddedServiceInfo user_id_info; | 
|  | user_id_info.factory = base::Bind(&user_id::CreateUserIdService); | 
|  | user_id_info.task_runner = base::ThreadTaskRunnerHandle::Get(); | 
|  | services->insert(std::make_pair("user_id", user_id_info)); | 
|  | } | 
|  |  | 
|  | }  // namespace web |