Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Unified Diff: extensions/renderer/api/display_source/wifi_display/wifi_display_session.cc

Issue 1730583002: [chrome.displaySource] further implementation of call completion callbacks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/renderer/api/display_source/wifi_display/wifi_display_session.cc
diff --git a/extensions/renderer/api/display_source/wifi_display/wifi_display_session.cc b/extensions/renderer/api/display_source/wifi_display/wifi_display_session.cc
index f6d1104fd7ddf10170690c1efd65126fec35d275..37495b576b557aeb37d2aa920cef0a948d4e0a7b 100644
--- a/extensions/renderer/api/display_source/wifi_display/wifi_display_session.cc
+++ b/extensions/renderer/api/display_source/wifi_display/wifi_display_session.cc
@@ -38,70 +38,94 @@ WiFiDisplaySession::WiFiDisplaySession(
WiFiDisplaySession::~WiFiDisplaySession() {
}
-void WiFiDisplaySession::Start() {
- DCHECK(state_ == DisplaySourceSession::Idle);
+void WiFiDisplaySession::Start(const CompletionCallback& callback) {
+ DCHECK_EQ(DisplaySourceSession::Idle, state_);
+ DCHECK(!terminated_callback_.is_null())
+ << "Should be set with 'SetNotificationCallbacks'";
+ DCHECK(!error_callback_.is_null())
+ << "Should be set with 'SetNotificationCallbacks'";
+
service_->Connect(params_.sink_id, params_.auth_method, params_.auth_data);
state_ = DisplaySourceSession::Establishing;
- if (!started_callback_.is_null())
- started_callback_.Run(params_.sink_id);
+ start_completion_callback_ = callback;
}
-void WiFiDisplaySession::Terminate() {
- DCHECK(state_ != DisplaySourceSession::Idle);
- switch (state_) {
- case DisplaySourceSession::Idle:
- case DisplaySourceSession::Terminating:
- // Nothing to do.
- return;
- case DisplaySourceSession::Establishing:
- case DisplaySourceSession::Established:
- service_->Disconnect();
- state_ = DisplaySourceSession::Terminating;
- break;
- default:
- NOTREACHED();
- }
+void WiFiDisplaySession::Terminate(const CompletionCallback& callback) {
+ DCHECK_EQ(DisplaySourceSession::Established, state_);
+ service_->Disconnect();
+ state_ = DisplaySourceSession::Terminating;
+ teminate_completion_callback_ = callback;
}
-void WiFiDisplaySession::OnEstablished(const mojo::String& ip_address) {
- DCHECK(state_ != DisplaySourceSession::Established);
+void WiFiDisplaySession::OnConnected(const mojo::String& ip_address) {
+ DCHECK_EQ(DisplaySourceSession::Established, state_);
ip_address_ = ip_address;
- state_ = DisplaySourceSession::Established;
+ // TODO(Mikhail): Start Wi-Fi Display session control message exchange.
+}
+
+void WiFiDisplaySession::OnConnectRequestHandled(bool success,
+ const mojo::String& error) {
+ DCHECK_EQ(DisplaySourceSession::Establishing, state_);
+ state_ =
+ success ? DisplaySourceSession::Established : DisplaySourceSession::Idle;
+ RunStartCompletionCB(success, error);
}
void WiFiDisplaySession::OnTerminated() {
- DCHECK(state_ != DisplaySourceSession::Idle);
+ DCHECK_NE(DisplaySourceSession::Idle, state_);
state_ = DisplaySourceSession::Idle;
- if (!terminated_callback_.is_null())
- terminated_callback_.Run(params_.sink_id);
+ terminated_callback_.Run();
+}
+
+void WiFiDisplaySession::OnDisconnectRequestHandled(bool success,
+ const mojo::String& error) {
+ RunTerminateCompletionCB(success, error);
}
void WiFiDisplaySession::OnError(int32_t type,
const mojo::String& description) {
DCHECK(type > api::display_source::ERROR_TYPE_NONE
&& type <= api::display_source::ERROR_TYPE_LAST);
- if (!error_callback_.is_null())
- error_callback_.Run(params_.sink_id, static_cast<ErrorType>(type),
- description);
+ DCHECK_EQ(DisplaySourceSession::Established, state_);
+ error_callback_.Run(static_cast<ErrorType>(type), description);
}
void WiFiDisplaySession::OnMessage(const mojo::String& data) {
- DCHECK(state_ == DisplaySourceSession::Established);
+ DCHECK_EQ(DisplaySourceSession::Established, state_);
}
void WiFiDisplaySession::OnConnectionError() {
- if (!error_callback_.is_null()) {
- error_callback_.Run(params_.sink_id,
- api::display_source::ERROR_TYPE_UNKNOWN_ERROR,
- kErrorInternal);
+ // We must explicitly notify the session termination as it will never
+ // arrive from browser process (IPC is broken).
+ switch (state_) {
+ case DisplaySourceSession::Idle:
+ case DisplaySourceSession::Establishing:
+ RunStartCompletionCB(false, kErrorInternal);
+ break;
+ case DisplaySourceSession::Terminating:
+ case DisplaySourceSession::Established:
+ error_callback_.Run(api::display_source::ERROR_TYPE_UNKNOWN_ERROR,
+ kErrorInternal);
+ state_ = DisplaySourceSession::Idle;
+ terminated_callback_.Run();
+ break;
+ default:
+ NOTREACHED();
}
+}
- if (state_ != DisplaySourceSession::Idle) {
- // We must explicitly notify the session termination as it will never
- // arrive from browser process (IPC is broken).
- if (!terminated_callback_.is_null())
- terminated_callback_.Run(params_.sink_id);
- }
+void WiFiDisplaySession::RunStartCompletionCB(
+ bool success,
+ const std::string& error_message) {
+ if (!start_completion_callback_.is_null())
+ start_completion_callback_.Run(success, error_message);
+}
+
+void WiFiDisplaySession::RunTerminateCompletionCB(
+ bool success,
+ const std::string& error_message) {
+ if (!teminate_completion_callback_.is_null())
+ teminate_completion_callback_.Run(success, error_message);
}
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698