summaryrefslogtreecommitdiffstats
path: root/remoting
diff options
context:
space:
mode:
authorwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-15 00:37:22 +0000
committerwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-15 00:37:22 +0000
commit762af0737d06e220374d88a27bac03fb92af16e2 (patch)
tree0edd15465b7aae3161aac2f48e3eefda92f5d682 /remoting
parent4cdd8574c7844486b58a6da2b471d7a9e219f1ee (diff)
downloadchromium_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.cc43
-rw-r--r--remoting/client/plugin/chromoting_instance.h2
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);