summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-11 21:40:36 +0000
committerbbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-11 21:40:36 +0000
commit81375e87af56fea163883cf2db9e2721929f41b4 (patch)
treef4cb600989229080d8135381adc87cfa93a38003
parent298aabcd096d8b54ebdac50948618547874206cd (diff)
downloadchromium_src-81375e87af56fea163883cf2db9e2721929f41b4.zip
chromium_src-81375e87af56fea163883cf2db9e2721929f41b4.tar.gz
chromium_src-81375e87af56fea163883cf2db9e2721929f41b4.tar.bz2
Allow plugins to add rotate commands to Chrome context menus.
BUG=63249 TEST=manual Review URL: http://codereview.chromium.org/9045007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117297 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/app/chrome_command_ids.h4
-rw-r--r--chrome/app/generated_resources.grd12
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc43
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.h3
-rw-r--r--content/browser/renderer_host/render_view_host.cc8
-rw-r--r--content/browser/renderer_host/render_view_host.h10
-rw-r--r--content/common/view_messages.h15
-rw-r--r--content/renderer/render_view_impl.cc9
-rw-r--r--content/renderer/render_view_impl.h5
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc19
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.h4
-rw-r--r--webkit/plugins/ppapi/ppapi_webplugin_impl.cc8
-rw-r--r--webkit/plugins/ppapi/ppapi_webplugin_impl.h5
-rw-r--r--webkit/plugins/ppapi/ppp_pdf.h11
14 files changed, 149 insertions, 7 deletions
diff --git a/chrome/app/chrome_command_ids.h b/chrome/app/chrome_command_ids.h
index 58bdbee..c0e11a1 100644
--- a/chrome/app/chrome_command_ids.h
+++ b/chrome/app/chrome_command_ids.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -254,6 +254,8 @@
#define IDC_CONTENT_CONTEXT_MUTE 50131
#define IDC_CONTENT_CONTEXT_LOOP 50132
#define IDC_CONTENT_CONTEXT_CONTROLS 50133
+#define IDC_CONTENT_CONTEXT_ROTATECW 50134
+#define IDC_CONTENT_CONTEXT_ROTATECCW 50135
// Edit items.
#define IDC_CONTENT_CONTEXT_COPY 50140
#define IDC_CONTENT_CONTEXT_CUT 50141
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 30ef5fa..d4e902f 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -442,6 +442,12 @@ are declared in build/common.gypi.
<message name="IDS_CONTENT_CONTEXT_CONTROLS" desc="The name of the Show Controls command for audio and video playback in the content area context menu">
Show &amp;Controls
</message>
+ <message name="IDS_CONTENT_CONTEXT_ROTATECW" desc="The name of the Rotate clockwise command for media playback in the content area context menu">
+ Rotate &amp;Clockwise
+ </message>
+ <message name="IDS_CONTENT_CONTEXT_ROTATECCW" desc="The name of the Rotate counterclockwise command for media playback in the content area context menu">
+ Rotate C&amp;ounterclockwise
+ </message>
<message name="IDS_CONTENT_CONTEXT_SAVEVIDEOAS" desc="The name of the Save Video As command in the content area context menu">
Sa&amp;ve video as...
@@ -651,6 +657,12 @@ are declared in build/common.gypi.
<message name="IDS_CONTENT_CONTEXT_CONTROLS" desc="In Title Case: The name of the Show Controls command for audio and video playback in the content area context menu">
Show &amp;Controls
</message>
+ <message name="IDS_CONTENT_CONTEXT_ROTATECW" desc="In Title Case: The name of the Rotate Clockwise command for media playback in the content area context menu">
+ Rotate &amp;Clockwise
+ </message>
+ <message name="IDS_CONTENT_CONTEXT_ROTATECCW" desc="In Title Case: The name of the Rotate Counterclockwise command for media playback in the content area context menu">
+ Rotate C&amp;ounterclockwise
+ </message>
<message name="IDS_CONTENT_CONTEXT_SAVEVIDEOAS" desc="In Title Case: The name of the Save Video As command in the content area context menu">
Sa&amp;ve Video As...
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index 6edf617..943b399 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -79,6 +79,7 @@
#include "net/base/net_util.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerAction.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginAction.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/text/text_elider.h"
#include "ui/gfx/favicon_size.h"
@@ -96,6 +97,7 @@ using content::UserMetricsAction;
using content::WebContents;
using WebKit::WebContextMenuData;
using WebKit::WebMediaPlayerAction;
+using WebKit::WebPluginAction;
using WebKit::WebURL;
using WebKit::WebString;
@@ -813,6 +815,14 @@ void RenderViewContextMenu::AppendPluginItems() {
IDS_CONTENT_CONTEXT_SAVEPAGEAS);
menu_model_.AddItemWithStringId(IDC_PRINT, IDS_CONTENT_CONTEXT_PRINT);
}
+
+ if (params_.media_flags & WebContextMenuData::MediaCanRotate) {
+ menu_model_.AddSeparator();
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_ROTATECW,
+ IDS_CONTENT_CONTEXT_ROTATECW);
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_ROTATECCW,
+ IDS_CONTENT_CONTEXT_ROTATECCW);
+ }
}
void RenderViewContextMenu::AppendPageItems() {
@@ -1187,6 +1197,11 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
return (params_.media_flags &
WebContextMenuData::MediaHasVideo) != 0;
+ case IDC_CONTENT_CONTEXT_ROTATECW:
+ case IDC_CONTENT_CONTEXT_ROTATECCW:
+ return
+ (params_.media_flags & WebContextMenuData::MediaCanRotate) != 0;
+
case IDC_CONTENT_CONTEXT_COPYAVLOCATION:
case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION:
return params_.src_url.is_valid();
@@ -1547,6 +1562,26 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
!IsCommandIdChecked(IDC_CONTENT_CONTEXT_CONTROLS)));
break;
+ case IDC_CONTENT_CONTEXT_ROTATECW:
+ content::RecordAction(
+ UserMetricsAction("PluginContextMenu_RotateClockwise"));
+ PluginActionAt(
+ gfx::Point(params_.x, params_.y),
+ WebPluginAction(
+ WebPluginAction::Rotate90Clockwise,
+ true));
+ break;
+
+ case IDC_CONTENT_CONTEXT_ROTATECCW:
+ content::RecordAction(
+ UserMetricsAction("PluginContextMenu_RotateCounterclockwise"));
+ PluginActionAt(
+ gfx::Point(params_.x, params_.y),
+ WebPluginAction(
+ WebPluginAction::Rotate90Counterclockwise,
+ true));
+ break;
+
case IDC_BACK:
source_web_contents_->GetController().GoBack();
break;
@@ -1897,3 +1932,11 @@ void RenderViewContextMenu::MediaPlayerActionAt(
source_web_contents_->GetRenderViewHost()->
ExecuteMediaPlayerActionAtLocation(location, action);
}
+
+void RenderViewContextMenu::PluginActionAt(
+ const gfx::Point& location,
+ const WebPluginAction& action) {
+ source_web_contents_->GetRenderViewHost()->
+ ExecutePluginActionAtLocation(location, action);
+}
+
diff --git a/chrome/browser/tab_contents/render_view_context_menu.h b/chrome/browser/tab_contents/render_view_context_menu.h
index d07bb49..e28bb76 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.h
+++ b/chrome/browser/tab_contents/render_view_context_menu.h
@@ -39,6 +39,7 @@ class Point;
namespace WebKit {
struct WebMediaPlayerAction;
+struct WebPluginAction;
}
// An interface that controls a RenderViewContextMenu instance from observers.
@@ -250,6 +251,8 @@ class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate,
void MediaPlayerActionAt(const gfx::Point& location,
const WebKit::WebMediaPlayerAction& action);
+ void PluginActionAt(const gfx::Point& location,
+ const WebKit::WebPluginAction& action);
bool IsDevCommandEnabled(int id) const;
diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc
index 96d76c8..dfc0fb9 100644
--- a/content/browser/renderer_host/render_view_host.cc
+++ b/content/browser/renderer_host/render_view_host.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -63,6 +63,7 @@ using WebKit::WebDragOperationNone;
using WebKit::WebDragOperationsMask;
using WebKit::WebInputEvent;
using WebKit::WebMediaPlayerAction;
+using WebKit::WebPluginAction;
namespace {
@@ -1384,6 +1385,11 @@ void RenderViewHost::ExecuteMediaPlayerActionAtLocation(
Send(new ViewMsg_MediaPlayerActionAt(routing_id(), location, action));
}
+void RenderViewHost::ExecutePluginActionAtLocation(
+ const gfx::Point& location, const WebKit::WebPluginAction& action) {
+ Send(new ViewMsg_PluginActionAt(routing_id(), location, action));
+}
+
void RenderViewHost::DisassociateFromPopupCount() {
Send(new ViewMsg_DisassociateFromPopupCount(routing_id()));
}
diff --git a/content/browser/renderer_host/render_view_host.h b/content/browser/renderer_host/render_view_host.h
index 1f52eaa..087da5b 100644
--- a/content/browser/renderer_host/render_view_host.h
+++ b/content/browser/renderer_host/render_view_host.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -73,8 +73,9 @@ struct CustomContextMenuContext;
} // namespace webkit_glue
namespace WebKit {
-struct WebMediaPlayerAction;
struct WebFindOptions;
+struct WebMediaPlayerAction;
+struct WebPluginAction;
} // namespace WebKit
// NotificationObserver used to listen for EXECUTE_JAVASCRIPT_RESULT
@@ -466,6 +467,11 @@ class CONTENT_EXPORT RenderViewHost : public RenderWidgetHost {
void ExecuteMediaPlayerActionAtLocation(
const gfx::Point& location, const WebKit::WebMediaPlayerAction& action);
+ // Tells the renderer to perform the given action on the plugin located at
+ // the given point.
+ void ExecutePluginActionAtLocation(
+ const gfx::Point& location, const WebKit::WebPluginAction& action);
+
// Sent to the renderer when a popup window should no longer count against
// the current popup count (either because it's not a popup or because it was
// a generated by a user action).
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 65fb343..576a2ae 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -30,6 +30,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFindOptions.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerAction.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginAction.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPopupType.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
#include "ui/base/ime/text_input_type.h"
@@ -58,6 +59,7 @@ IPC_ENUM_TRAITS(ViewHostMsg_AccEvent::Value)
IPC_ENUM_TRAITS(ViewMsg_Navigate_Type::Value)
IPC_ENUM_TRAITS(WebKit::WebContextMenuData::MediaType)
IPC_ENUM_TRAITS(WebKit::WebMediaPlayerAction::Type)
+IPC_ENUM_TRAITS(WebKit::WebPluginAction::Type)
IPC_ENUM_TRAITS(WebKit::WebPopupType)
IPC_ENUM_TRAITS(WebKit::WebReferrerPolicy)
IPC_ENUM_TRAITS(WebKit::WebTextDirection)
@@ -139,6 +141,11 @@ IPC_STRUCT_TRAITS_BEGIN(WebKit::WebMediaPlayerAction)
IPC_STRUCT_TRAITS_MEMBER(enable)
IPC_STRUCT_TRAITS_END()
+IPC_STRUCT_TRAITS_BEGIN(WebKit::WebPluginAction)
+ IPC_STRUCT_TRAITS_MEMBER(type)
+ IPC_STRUCT_TRAITS_MEMBER(enable)
+IPC_STRUCT_TRAITS_END()
+
IPC_STRUCT_TRAITS_BEGIN(WebKit::WebRect)
IPC_STRUCT_TRAITS_MEMBER(x)
IPC_STRUCT_TRAITS_MEMBER(y)
@@ -869,6 +876,12 @@ IPC_MESSAGE_ROUTED2(ViewMsg_MediaPlayerActionAt,
gfx::Point, /* location */
WebKit::WebMediaPlayerAction)
+// Tells the renderer to perform the given action on the plugin located at
+// the given point.
+IPC_MESSAGE_ROUTED2(ViewMsg_PluginActionAt,
+ gfx::Point, /* location */
+ WebKit::WebPluginAction)
+
// Request for the renderer to evaluate an xpath to a frame and execute a
// javascript: url in that frame's context. The message is completely
// asynchronous and no corresponding response message is sent back.
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index cffbbba..d92ef49 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -106,6 +106,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebNodeList.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPageSerializer.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginAction.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginDocument.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginParams.h"
@@ -208,6 +209,7 @@ using WebKit::WebNode;
using WebKit::WebPageSerializer;
using WebKit::WebPageSerializerClient;
using WebKit::WebPlugin;
+using WebKit::WebPluginAction;
using WebKit::WebPluginContainer;
using WebKit::WebPluginDocument;
using WebKit::WebPluginParams;
@@ -662,6 +664,7 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
OnDisableScrollbarsForSmallWindows)
IPC_MESSAGE_HANDLER(ViewMsg_SetRendererPrefs, OnSetRendererPrefs)
IPC_MESSAGE_HANDLER(ViewMsg_MediaPlayerActionAt, OnMediaPlayerActionAt)
+ IPC_MESSAGE_HANDLER(ViewMsg_PluginActionAt, OnPluginActionAt)
IPC_MESSAGE_HANDLER(ViewMsg_SetActive, OnSetActive)
#if defined(OS_MACOSX)
IPC_MESSAGE_HANDLER(ViewMsg_SetWindowVisibility, OnSetWindowVisibility)
@@ -3979,6 +3982,12 @@ void RenderViewImpl::OnMediaPlayerActionAt(const gfx::Point& location,
webview()->performMediaPlayerAction(action, location);
}
+void RenderViewImpl::OnPluginActionAt(const gfx::Point& location,
+ const WebPluginAction& action) {
+ if (webview())
+ webview()->performPluginAction(action, location);
+}
+
void RenderViewImpl::OnGetAllSavableResourceLinksForCurrentPage(
const GURL& page_url) {
// Prepare list to storage all savable resource links.
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 22a555f..b04e3f7 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -127,6 +127,7 @@ class WebURLRequest;
struct WebFileChooserParams;
struct WebFindOptions;
struct WebMediaPlayerAction;
+struct WebPluginAction;
struct WebPoint;
struct WebWindowFeatures;
}
@@ -791,6 +792,8 @@ class RenderViewImpl : public RenderWidget,
void OnLockMouseACK(bool succeeded);
void OnMediaPlayerActionAt(const gfx::Point& location,
const WebKit::WebMediaPlayerAction& action);
+ void OnPluginActionAt(const gfx::Point& location,
+ const WebKit::WebPluginAction& action);
void OnMouseLockLost();
void OnMoveOrResizeStarted();
CONTENT_EXPORT void OnNavigate(const ViewMsg_Navigate_Params& params);
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
index ddd052d..7f849f6 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
@@ -116,6 +116,7 @@ using WebKit::WebDocument;
using WebKit::WebElement;
using WebKit::WebFrame;
using WebKit::WebInputEvent;
+using WebKit::WebPlugin;
using WebKit::WebPluginContainer;
using WebKit::WebString;
using WebKit::WebURLRequest;
@@ -1192,6 +1193,24 @@ void PluginInstance::PrintEnd() {
#endif // defined(OS_MACOSX)
}
+bool PluginInstance::CanRotateView() {
+ if (!LoadPdfInterface())
+ return false;
+
+ return true;
+}
+
+void PluginInstance::RotateView(WebPlugin::RotationType type) {
+ if (!LoadPdfInterface())
+ return;
+ PP_PrivatePageTransformType transform_type =
+ type == WebPlugin::RotationType90Clockwise ?
+ PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CW :
+ PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CCW;
+ plugin_pdf_interface_->Transform(pp_instance(), transform_type);
+ // NOTE: plugin instance may have been deleted.
+}
+
bool PluginInstance::FlashIsFullscreenOrPending() {
return fullscreen_container_ != NULL;
}
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h
index 3caef5c..086125f 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.h
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.h
@@ -38,6 +38,7 @@
#include "third_party/skia/include/core/SkRefCnt.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCanvas.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h"
#include "ui/base/ime/text_input_type.h"
#include "ui/gfx/rect.h"
#include "webkit/plugins/ppapi/plugin_delegate.h"
@@ -227,6 +228,9 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance :
bool PrintPage(int page_number, WebKit::WebCanvas* canvas);
void PrintEnd();
+ bool CanRotateView();
+ void RotateView(WebKit::WebPlugin::RotationType type);
+
void Graphics3DContextLost();
// There are 2 implementations of the fullscreen interface
diff --git a/webkit/plugins/ppapi/ppapi_webplugin_impl.cc b/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
index df52705..c505741 100644
--- a/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
+++ b/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
@@ -260,5 +260,13 @@ void WebPluginImpl::printEnd() {
return instance_->PrintEnd();
}
+bool WebPluginImpl::canRotateView() {
+ return instance_->CanRotateView();
+}
+
+void WebPluginImpl::rotateView(RotationType type) {
+ instance_->RotateView(type);
+}
+
} // namespace ppapi
} // namespace webkit
diff --git a/webkit/plugins/ppapi/ppapi_webplugin_impl.h b/webkit/plugins/ppapi/ppapi_webplugin_impl.h
index 21e693f..e853281 100644
--- a/webkit/plugins/ppapi/ppapi_webplugin_impl.h
+++ b/webkit/plugins/ppapi/ppapi_webplugin_impl.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -81,6 +81,9 @@ class WebPluginImpl : public WebKit::WebPlugin {
virtual bool printPage(int page_number, WebKit::WebCanvas* canvas) OVERRIDE;
virtual void printEnd() OVERRIDE;
+ virtual bool canRotateView() OVERRIDE;
+ virtual void rotateView(RotationType type) OVERRIDE;
+
struct InitData;
scoped_ptr<InitData> init_data_; // Cleared upon successful initialization.
diff --git a/webkit/plugins/ppapi/ppp_pdf.h b/webkit/plugins/ppapi/ppp_pdf.h
index 4076b60..9f4cfcd 100644
--- a/webkit/plugins/ppapi/ppp_pdf.h
+++ b/webkit/plugins/ppapi/ppp_pdf.h
@@ -12,10 +12,21 @@
#define PPP_PDF_INTERFACE_1 "PPP_Pdf;1"
#define PPP_PDF_INTERFACE PPP_PDF_INTERFACE_1
+typedef enum {
+ // Rotates the page 90 degrees clockwise from its current orientation.
+ PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CW,
+ // Rotates the page 90 degrees counterclockwise from its current orientation.
+ PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CCW
+} PP_PrivatePageTransformType;
+PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_PrivatePageTransformType, 4);
+
struct PPP_Pdf_1 {
// Returns an absolute URL if the position is over a link.
PP_Var (*GetLinkAtPosition)(PP_Instance instance,
PP_Point point);
+
+ // Requests that the plugin apply the given transform to its view.
+ void (*Transform)(PP_Instance instance, PP_PrivatePageTransformType type);
};
typedef PPP_Pdf_1 PPP_Pdf;