| Index: chrome/browser/net/load_timing_observer.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/net/load_timing_observer.cc	(revision 67848)
 | 
| +++ chrome/browser/net/load_timing_observer.cc	(working copy)
 | 
| @@ -44,7 +44,7 @@
 | 
|        (time_ticks - record->base_ticks).InMillisecondsRoundedUp());
 | 
|  }
 | 
|  
 | 
| -}
 | 
| +}  // namespace
 | 
|  
 | 
|  LoadTimingObserver::URLRequestRecord::URLRequestRecord()
 | 
|      : connect_job_id(net::NetLog::Source::kInvalidId),
 | 
| @@ -53,7 +53,7 @@
 | 
|  }
 | 
|  
 | 
|  LoadTimingObserver::LoadTimingObserver()
 | 
| -    : Observer(net::NetLog::LOG_BASIC),
 | 
| +    : ThreadSafeObserver(net::NetLog::LOG_BASIC),
 | 
|        last_connect_job_id_(net::NetLog::Source::kInvalidId) {
 | 
|  }
 | 
|  
 | 
| @@ -62,6 +62,8 @@
 | 
|  
 | 
|  LoadTimingObserver::URLRequestRecord*
 | 
|  LoadTimingObserver::GetURLRequestRecord(uint32 source_id) {
 | 
| +  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
| +
 | 
|    URLRequestToRecordMap::iterator it = url_request_to_record_.find(source_id);
 | 
|    if (it != url_request_to_record_.end())
 | 
|      return &it->second;
 | 
| @@ -73,6 +75,9 @@
 | 
|                                      const net::NetLog::Source& source,
 | 
|                                      net::NetLog::EventPhase phase,
 | 
|                                      net::NetLog::EventParameters* params) {
 | 
| +  // The events that the Observer is interested in only occur on the IO thread.
 | 
| +  if (!BrowserThread::CurrentlyOn(BrowserThread::IO))
 | 
| +    return;
 | 
|    if (source.type == net::NetLog::SOURCE_URL_REQUEST)
 | 
|      OnAddURLRequestEntry(type, time, source, phase, params);
 | 
|    else if (source.type == net::NetLog::SOURCE_CONNECT_JOB)
 | 
| @@ -84,6 +89,7 @@
 | 
|  // static
 | 
|  void LoadTimingObserver::PopulateTimingInfo(net::URLRequest* request,
 | 
|                                              ResourceResponse* response) {
 | 
| +  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
|    if (!(request->load_flags() & net::LOAD_ENABLE_LOAD_TIMING))
 | 
|      return;
 | 
|  
 | 
| @@ -109,6 +115,8 @@
 | 
|      const net::NetLog::Source& source,
 | 
|      net::NetLog::EventPhase phase,
 | 
|      net::NetLog::EventParameters* params) {
 | 
| +  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
| +
 | 
|    bool is_begin = phase == net::NetLog::PHASE_BEGIN;
 | 
|    bool is_end = phase == net::NetLog::PHASE_END;
 | 
|  
 | 
| @@ -210,6 +218,8 @@
 | 
|      const net::NetLog::Source& source,
 | 
|      net::NetLog::EventPhase phase,
 | 
|      net::NetLog::EventParameters* params) {
 | 
| +  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
| +
 | 
|    bool is_begin = phase == net::NetLog::PHASE_BEGIN;
 | 
|    bool is_end = phase == net::NetLog::PHASE_END;
 | 
|  
 | 
| @@ -253,6 +263,8 @@
 | 
|      const net::NetLog::Source& source,
 | 
|      net::NetLog::EventPhase phase,
 | 
|      net::NetLog::EventParameters* params) {
 | 
| +  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
| +
 | 
|    bool is_begin = phase == net::NetLog::PHASE_BEGIN;
 | 
|    bool is_end = phase == net::NetLog::PHASE_END;
 | 
|  
 | 
| 
 |