| Index: chrome/browser/media/router/discovery/dial/dial_media_sink_service.h
 | 
| diff --git a/chrome/browser/media/router/discovery/dial/dial_media_sink_service.h b/chrome/browser/media/router/discovery/dial/dial_media_sink_service.h
 | 
| index 86f72c5beba6118eb17052fe0f245a9b357fa052..e30c916722f4301beafeb20e242e7b1cd73a196a 100644
 | 
| --- a/chrome/browser/media/router/discovery/dial/dial_media_sink_service.h
 | 
| +++ b/chrome/browser/media/router/discovery/dial/dial_media_sink_service.h
 | 
| @@ -28,22 +28,30 @@ class DialMediaSinkService : public MediaSinkService,
 | 
|                         net::URLRequestContextGetter* request_context);
 | 
|    ~DialMediaSinkService() override;
 | 
|  
 | 
| +  // Stop listening to DIAL device event.
 | 
| +  virtual void Stop();
 | 
| +
 | 
|    // MediaSinkService implementation
 | 
|    void Start() override;
 | 
|  
 | 
| -  void Stop();
 | 
| -
 | 
|   protected:
 | 
| -  virtual DialRegistry* dial_registry();
 | 
|  
 | 
|    // Returns instance of device description service. Create a new one if none
 | 
|    // exists.
 | 
| -  virtual DeviceDescriptionService* GetDescriptionService();
 | 
| +  DeviceDescriptionService* GetDescriptionService();
 | 
| +
 | 
| +  // Does not take ownership of |dial_registry|.
 | 
| +  void SetDialRegistryForTest(DialRegistry* dial_registry);
 | 
| +  void SetDescriptionServiceForTest(
 | 
| +      std::unique_ptr<DeviceDescriptionService> description_service);
 | 
| +  void SetTimerForTest(std::unique_ptr<base::Timer> timer);
 | 
|  
 | 
|   private:
 | 
|    friend class DialMediaSinkServiceTest;
 | 
|    FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceTest, TestStart);
 | 
| -  FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceTest, TestFetchCompleted);
 | 
| +  FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceTest, TestTimer);
 | 
| +  FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceTest,
 | 
| +                           TestFetchCompleted_SameSink);
 | 
|    FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceTest, TestIsDifferent);
 | 
|    FRIEND_TEST_ALL_PREFIXES(DialMediaSinkServiceTest,
 | 
|                             TestOnDeviceDescriptionAvailable);
 | 
| @@ -65,13 +73,19 @@ class DialMediaSinkService : public MediaSinkService,
 | 
|    // Called when |finish_timer_| expires.
 | 
|    void OnFetchCompleted();
 | 
|  
 | 
| +  // Helper function to start |finish_timer_|.
 | 
| +  void StartTimer();
 | 
| +
 | 
|    // Timer for finishing fetching. Starts in |OnDialDeviceEvent()|, and expires
 | 
|    // 3 seconds later. If |OnDeviceDescriptionAvailable()| is called after
 | 
|    // |finish_timer_| expires, |finish_timer_| is restarted.
 | 
| -  std::unique_ptr<base::OneShotTimer> finish_timer_;
 | 
| +  std::unique_ptr<base::Timer> finish_timer_;
 | 
|  
 | 
|    std::unique_ptr<DeviceDescriptionService> description_service_;
 | 
|  
 | 
| +  // Raw pointer to DialRegistry singleton.
 | 
| +  DialRegistry* dial_registry_ = nullptr;
 | 
| +
 | 
|    // Sorted sinks from current round of discovery.
 | 
|    std::set<MediaSinkInternal> current_sinks_;
 | 
|  
 | 
| @@ -82,6 +96,9 @@ class DialMediaSinkService : public MediaSinkService,
 | 
|    DialRegistry::DeviceList current_devices_;
 | 
|  
 | 
|    scoped_refptr<net::URLRequestContextGetter> request_context_;
 | 
| +
 | 
| +  // True if discovery has started.
 | 
| +  bool discovery_started_;
 | 
|  };
 | 
|  
 | 
|  }  // namespace media_router
 | 
| 
 |