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 {
}
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 {
// This must be the first message.
WebviewCreateRequest create = 1;
......@@ -209,6 +213,10 @@ message WebviewRequest {
}
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 {
WebviewCreateResponse create_response = 1;
AsyncPageEvent page_event = 2;
......
......@@ -70,7 +70,7 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) {
case webview::WebviewRequest::kEvaluateJavascript:
if (request.has_evaluate_javascript()) {
HandleEvaluateJavascript(request.evaluate_javascript());
HandleEvaluateJavascript(request.id(), request.evaluate_javascript());
} else {
client_->OnError("evaluate_javascript() not supplied");
}
......@@ -93,15 +93,15 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) {
break;
case webview::WebviewRequest::kGetCurrentUrl:
HandleGetCurrentUrl();
HandleGetCurrentUrl(request.id());
break;
case webview::WebviewRequest::kCanGoBack:
HandleCanGoBack();
HandleCanGoBack(request.id());
break;
case webview::WebviewRequest::kCanGoForward:
HandleCanGoForward();
HandleCanGoForward(request.id());
break;
case webview::WebviewRequest::kGoBack:
......@@ -131,7 +131,7 @@ void WebviewController::ProcessRequest(const webview::WebviewRequest& request) {
break;
case webview::WebviewRequest::kGetTitle:
HandleGetTitle();
HandleGetTitle(request.id());
break;
case webview::WebviewRequest::kSetAutoMediaPlaybackPolicy:
......@@ -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;
base::JSONWriter::Write(result, &json);
std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_evaluate_javascript()->set_json(json);
client_->EnqueueSend(std::move(response));
}
void WebviewController::HandleEvaluateJavascript(
int64_t id,
const webview::EvaluateJavascriptRequest& request) {
contents_->GetMainFrame()->ExecuteJavaScript(
base::UTF8ToUTF16(request.javascript_blob()),
base::BindOnce(&WebviewController::JavascriptCallback,
weak_ptr_factory_.GetWeakPtr()));
weak_ptr_factory_.GetWeakPtr(), id));
}
void WebviewController::HandleAddJavascriptChannels(
......@@ -244,27 +246,30 @@ void WebviewController::HandleRemoveJavascriptChannels(
client_->OnError("Unimplemented remove_javascript_channels()");
}
void WebviewController::HandleGetCurrentUrl() {
void WebviewController::HandleGetCurrentUrl(int64_t id) {
std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_get_current_url()->set_url(contents_->GetURL().spec());
client_->EnqueueSend(std::move(response));
}
void WebviewController::HandleCanGoBack() {
void WebviewController::HandleCanGoBack(int64_t id) {
std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_can_go_back()->set_can_go_back(
contents_->GetController().CanGoBack());
client_->EnqueueSend(std::move(response));
}
void WebviewController::HandleCanGoForward() {
void WebviewController::HandleCanGoForward(int64_t id) {
std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_can_go_forward()->set_can_go_forward(
contents_->GetController().CanGoForward());
client_->EnqueueSend(std::move(response));
......@@ -286,10 +291,11 @@ void WebviewController::HandleClearCache() {
content::BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB);
}
void WebviewController::HandleGetTitle() {
void WebviewController::HandleGetTitle(int64_t id) {
std::unique_ptr<webview::WebviewResponse> response =
std::make_unique<webview::WebviewResponse>();
response->set_id(id);
response->mutable_get_title()->set_title(
base::UTF16ToUTF8(contents_->GetTitle()));
client_->EnqueueSend(std::move(response));
......
......@@ -58,18 +58,19 @@ class WebviewController : public CastWebContents::Delegate,
webview::AsyncPageEvent_State current_state();
void ProcessInputEvent(const webview::InputEvent& ev);
void JavascriptCallback(base::Value result);
void JavascriptCallback(int64_t id, base::Value result);
void HandleEvaluateJavascript(
int64_t id,
const webview::EvaluateJavascriptRequest& request);
void HandleAddJavascriptChannels(
const webview::AddJavascriptChannelsRequest& request);
void HandleRemoveJavascriptChannels(
const webview::RemoveJavascriptChannelsRequest& request);
void HandleGetCurrentUrl();
void HandleCanGoBack();
void HandleCanGoForward();
void HandleGetCurrentUrl(int64_t id);
void HandleCanGoBack(int64_t id);
void HandleCanGoForward(int64_t id);
void HandleClearCache();
void HandleGetTitle();
void HandleGetTitle(int64_t id);
void HandleUpdateSettings(const webview::UpdateSettingsRequest& request);
void HandleSetAutoMediaPlaybackPolicy(
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