Commit ac0be37f authored by Daniel Nicoara's avatar Daniel Nicoara Committed by Commit Bot

Add unique IDs to request/response pair

Responses need to be matched to their request. So add a unique
identifier to ensure the client can match the response to the
appropriate request.

Bug: b/132811925
Test: Compiled
Change-Id: I8358e5baed4922de2960a8eebd712443473bebdb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1833483Reviewed-by: default avatarAlex Sakhartchouk <alexst@chromium.org>
Commit-Queue: Daniel Nicoara <dnicoara@chromium.org>
Cr-Commit-Position: refs/heads/master@{#701661}
parent 72ff353c
...@@ -170,6 +170,10 @@ message SetAutoMediaPlaybackPolicyRequest { ...@@ -170,6 +170,10 @@ message SetAutoMediaPlaybackPolicyRequest {
} }
message WebviewRequest { message WebviewRequest {
// Unique identifier for the request. For requests that will have a response,
// the response id will match the request id.
// Valid ID values must be greater than 0.
int64 id = 18;
oneof type { oneof type {
// This must be the first message. // This must be the first message.
WebviewCreateRequest create = 1; WebviewCreateRequest create = 1;
...@@ -209,6 +213,10 @@ message WebviewRequest { ...@@ -209,6 +213,10 @@ message WebviewRequest {
} }
message WebviewResponse { message WebviewResponse {
// Unique identifier. The value will match that of the request.
// Responses that do not have an associated request (such as page status
// event), the ID is meaningless.
int64 id = 8;
oneof type { oneof type {
WebviewCreateResponse create_response = 1; WebviewCreateResponse create_response = 1;
AsyncPageEvent page_event = 2; AsyncPageEvent page_event = 2;
......
...@@ -70,7 +70,7 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) { ...@@ -70,7 +70,7 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) {
case webview::WebviewRequest::kEvaluateJavascript: case webview::WebviewRequest::kEvaluateJavascript:
if (request.has_evaluate_javascript()) { if (request.has_evaluate_javascript()) {
HandleEvaluateJavascript(request.evaluate_javascript()); HandleEvaluateJavascript(request.id(), request.evaluate_javascript());
} else { } else {
client_->OnError("evaluate_javascript() not supplied"); client_->OnError("evaluate_javascript() not supplied");
} }
...@@ -93,15 +93,15 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) { ...@@ -93,15 +93,15 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) {
break; break;
case webview::WebviewRequest::kGetCurrentUrl: case webview::WebviewRequest::kGetCurrentUrl:
HandleGetCurrentUrl(); HandleGetCurrentUrl(request.id());
break; break;
case webview::WebviewRequest::kCanGoBack: case webview::WebviewRequest::kCanGoBack:
HandleCanGoBack(); HandleCanGoBack(request.id());
break; break;
case webview::WebviewRequest::kCanGoForward: case webview::WebviewRequest::kCanGoForward:
HandleCanGoForward(); HandleCanGoForward(request.id());
break; break;
case webview::WebviewRequest::kGoBack: case webview::WebviewRequest::kGoBack:
...@@ -131,7 +131,7 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) { ...@@ -131,7 +131,7 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) {
break; break;
case webview::WebviewRequest::kGetTitle: case webview::WebviewRequest::kGetTitle:
HandleGetTitle(); HandleGetTitle(request.id());
break; break;
case webview::WebviewRequest::kSetAutoMediaPlaybackPolicy: case webview::WebviewRequest::kSetAutoMediaPlaybackPolicy:
...@@ -215,21 +215,23 @@ void WebviewController::ProcessInputEvent(const webview::InputEvent& ev) { ...@@ -215,21 +215,23 @@ void WebviewController::ProcessInputEvent(const webview::InputEvent& ev) {
} }
} }
void WebviewController::JavascriptCallback(base::Value result) { void WebviewController::JavascriptCallback(int64_t id, base::Value result) {
std::string json; std::string json;
base::JSONWriter::Write(result, &json); base::JSONWriter::Write(result, &json);
std::unique_ptr<webview::WebviewResponse> response = std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>(); std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_evaluate_javascript()->set_json(json); response->mutable_evaluate_javascript()->set_json(json);
client_->EnqueueSend(std::move(response)); client_->EnqueueSend(std::move(response));
} }
void WebviewController::HandleEvaluateJavascript( void WebviewController::HandleEvaluateJavascript(
int64_t id,
const webview::EvaluateJavascriptRequest& request) { const webview::EvaluateJavascriptRequest& request) {
contents_->GetMainFrame()->ExecuteJavaScript( contents_->GetMainFrame()->ExecuteJavaScript(
base::UTF8ToUTF16(request.javascript_blob()), base::UTF8ToUTF16(request.javascript_blob()),
base::BindOnce(&WebviewController::JavascriptCallback, base::BindOnce(&WebviewController::JavascriptCallback,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr(), id));
} }
void WebviewController::HandleAddJavascriptChannels( void WebviewController::HandleAddJavascriptChannels(
...@@ -244,27 +246,30 @@ void WebviewController::HandleRemoveJavascriptChannels( ...@@ -244,27 +246,30 @@ void WebviewController::HandleRemoveJavascriptChannels(
client_->OnError("Unimplemented remove_javascript_channels()"); client_->OnError("Unimplemented remove_javascript_channels()");
} }
void WebviewController::HandleGetCurrentUrl() { void WebviewController::HandleGetCurrentUrl(int64_t id) {
std::unique_ptr<webview::WebviewResponse> response = std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>(); std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_get_current_url()->set_url(contents_->GetURL().spec()); response->mutable_get_current_url()->set_url(contents_->GetURL().spec());
client_->EnqueueSend(std::move(response)); client_->EnqueueSend(std::move(response));
} }
void WebviewController::HandleCanGoBack() { void WebviewController::HandleCanGoBack(int64_t id) {
std::unique_ptr<webview::WebviewResponse> response = std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>(); std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_can_go_back()->set_can_go_back( response->mutable_can_go_back()->set_can_go_back(
contents_->GetController().CanGoBack()); contents_->GetController().CanGoBack());
client_->EnqueueSend(std::move(response)); client_->EnqueueSend(std::move(response));
} }
void WebviewController::HandleCanGoForward() { void WebviewController::HandleCanGoForward(int64_t id) {
std::unique_ptr<webview::WebviewResponse> response = std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>(); std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_can_go_forward()->set_can_go_forward( response->mutable_can_go_forward()->set_can_go_forward(
contents_->GetController().CanGoForward()); contents_->GetController().CanGoForward());
client_->EnqueueSend(std::move(response)); client_->EnqueueSend(std::move(response));
...@@ -286,10 +291,11 @@ void WebviewController::HandleClearCache() { ...@@ -286,10 +291,11 @@ void WebviewController::HandleClearCache() {
content::BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB); content::BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB);
} }
void WebviewController::HandleGetTitle() { void WebviewController::HandleGetTitle(int64_t id) {
std::unique_ptr<webview::WebviewResponse> response = std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>(); std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_get_title()->set_title( response->mutable_get_title()->set_title(
base::UTF16ToUTF8(contents_->GetTitle())); base::UTF16ToUTF8(contents_->GetTitle()));
client_->EnqueueSend(std::move(response)); client_->EnqueueSend(std::move(response));
......
...@@ -58,18 +58,19 @@ class WebviewController : public CastWebContents::Delegate, ...@@ -58,18 +58,19 @@ class WebviewController : public CastWebContents::Delegate,
webview::AsyncPageEvent_State current_state(); webview::AsyncPageEvent_State current_state();
void ProcessInputEvent(const webview::InputEvent& ev); void ProcessInputEvent(const webview::InputEvent& ev);
void JavascriptCallback(base::Value result); void JavascriptCallback(int64_t id, base::Value result);
void HandleEvaluateJavascript( void HandleEvaluateJavascript(
int64_t id,
const webview::EvaluateJavascriptRequest& request); const webview::EvaluateJavascriptRequest& request);
void HandleAddJavascriptChannels( void HandleAddJavascriptChannels(
const webview::AddJavascriptChannelsRequest& request); const webview::AddJavascriptChannelsRequest& request);
void HandleRemoveJavascriptChannels( void HandleRemoveJavascriptChannels(
const webview::RemoveJavascriptChannelsRequest& request); const webview::RemoveJavascriptChannelsRequest& request);
void HandleGetCurrentUrl(); void HandleGetCurrentUrl(int64_t id);
void HandleCanGoBack(); void HandleCanGoBack(int64_t id);
void HandleCanGoForward(); void HandleCanGoForward(int64_t id);
void HandleClearCache(); void HandleClearCache();
void HandleGetTitle(); void HandleGetTitle(int64_t id);
void HandleUpdateSettings(const webview::UpdateSettingsRequest& request); void HandleUpdateSettings(const webview::UpdateSettingsRequest& request);
void HandleSetAutoMediaPlaybackPolicy( void HandleSetAutoMediaPlaybackPolicy(
const webview::SetAutoMediaPlaybackPolicyRequest& request); const webview::SetAutoMediaPlaybackPolicyRequest& request);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment