diff options
author | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-15 00:37:22 +0000 |
---|---|---|
committer | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-15 00:37:22 +0000 |
commit | 762af0737d06e220374d88a27bac03fb92af16e2 (patch) | |
tree | 0edd15465b7aae3161aac2f48e3eefda92f5d682 /remoting | |
parent | 4cdd8574c7844486b58a6da2b471d7a9e219f1ee (diff) | |
download | chromium_src-762af0737d06e220374d88a27bac03fb92af16e2.zip chromium_src-762af0737d06e220374d88a27bac03fb92af16e2.tar.gz chromium_src-762af0737d06e220374d88a27bac03fb92af16e2.tar.bz2 |
Add notifyClientResolution API to the client plugin.
BUG=172404
Review URL: https://chromiumcodereview.appspot.com/12225113
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182589 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting')
-rw-r--r-- | remoting/client/plugin/chromoting_instance.cc | 43 | ||||
-rw-r--r-- | remoting/client/plugin/chromoting_instance.h | 2 |
2 files changed, 33 insertions, 12 deletions
diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc index 3ee563d..c109a46 100644 --- a/remoting/client/plugin/chromoting_instance.cc +++ b/remoting/client/plugin/chromoting_instance.cc @@ -134,7 +134,7 @@ logging::LogMessageHandlerFunction g_logging_old_handler = NULL; // String sent in the "hello" message to the plugin to describe features. const char ChromotingInstance::kApiFeatures[] = "highQualityScaling injectKeyEvent sendClipboardItem remapKey trapKey " - "notifyClientDimensions pauseVideo pauseAudio"; + "notifyClientDimensions notifyClientResolution pauseVideo pauseAudio"; bool ChromotingInstance::ParseAuthMethods(const std::string& auth_methods_str, ClientConfig* config) { @@ -332,15 +332,33 @@ void ChromotingInstance::HandleMessage(const pp::Var& message) { return; } SendClipboardItem(mime_type, item); - } else if (method == "notifyClientDimensions") { + } else if (method == "notifyClientDimensions" || + method == "notifyClientResolution") { + // notifyClientResolution's width and height are in pixels, + // notifyClientDimension's in DIPs, but since for the latter + // we assume 96dpi, DIPs and pixels are equivalent. int width = 0; int height = 0; if (!data->GetInteger("width", &width) || - !data->GetInteger("height", &height)) { - LOG(ERROR) << "Invalid notifyClientDimensions."; + !data->GetInteger("height", &height) || + width <= 0 || height <= 0) { + LOG(ERROR) << "Invalid " << method << "."; return; } - NotifyClientDimensions(width, height); + + // notifyClientResolution requires that DPI be specified. + // For notifyClientDimensions we assume 96dpi. + int x_dpi = kDefaultDPI; + int y_dpi = kDefaultDPI; + if (method == "notifyClientResolution" && + (!data->GetInteger("x_dpi", &x_dpi) || + !data->GetInteger("y_dpi", &y_dpi) || + x_dpi <= 0 || y_dpi <= 0)) { + LOG(ERROR) << "Invalid notifyClientResolution."; + return; + } + + NotifyClientResolution(width, height, x_dpi, y_dpi); } else if (method == "pauseVideo") { bool pause = false; if (!data->GetBoolean("pause", &pause)) { @@ -593,7 +611,10 @@ void ChromotingInstance::SendClipboardItem(const std::string& mime_type, host_connection_->clipboard_stub()->InjectClipboardEvent(event); } -void ChromotingInstance::NotifyClientDimensions(int width, int height) { +void ChromotingInstance::NotifyClientResolution(int width, + int height, + int x_dpi, + int y_dpi) { if (!IsConnected()) { return; } @@ -601,12 +622,12 @@ void ChromotingInstance::NotifyClientDimensions(int width, int height) { protocol::ClientResolution client_resolution; client_resolution.set_width(width); client_resolution.set_height(height); - client_resolution.set_x_dpi(kDefaultDPI); - client_resolution.set_y_dpi(kDefaultDPI); + client_resolution.set_x_dpi(x_dpi); + client_resolution.set_y_dpi(y_dpi); - // Include the legacy width & height for use by older hosts. - client_resolution.set_dips_width(width); - client_resolution.set_dips_height(height); + // Include the legacy width & height in DIPs for use by older hosts. + client_resolution.set_dips_width((width * kDefaultDPI) / x_dpi); + client_resolution.set_dips_height((height * kDefaultDPI) / y_dpi); host_connection_->host_stub()->NotifyClientResolution(client_resolution); } diff --git a/remoting/client/plugin/chromoting_instance.h b/remoting/client/plugin/chromoting_instance.h index 572a5a0..9765f96 100644 --- a/remoting/client/plugin/chromoting_instance.h +++ b/remoting/client/plugin/chromoting_instance.h @@ -130,7 +130,7 @@ class ChromotingInstance : void RemapKey(uint32 in_usb_keycode, uint32 out_usb_keycode); void TrapKey(uint32 usb_keycode, bool trap); void SendClipboardItem(const std::string& mime_type, const std::string& item); - void NotifyClientDimensions(int width, int height); + void NotifyClientResolution(int width, int height, int x_dpi, int y_dpi); void PauseVideo(bool pause); void PauseAudio(bool pause); |