Commit 247e1bc8 authored by brettw@chromium.org's avatar brettw@chromium.org

Add a Flash API to get the device ID.

BUG=
TEST=

Review URL: https://chromiumcodereview.appspot.com/9960083

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@132269 0039d316-1c4b-4281-b951-d872f2087c98
parent b04cc6f4
......@@ -9,7 +9,8 @@
label Chrome {
M17 = 12.0,
M19 = 12.1
M19 = 12.1,
M20 = 12.2
};
/**
......@@ -129,6 +130,12 @@ interface PPB_Flash {
[version=12.1]
void UpdateActivity(
[in] PP_Instance instance);
/**
* Returns the device ID as a string. Returns a PP_VARTYPE_UNDEFINED on error.
*/
[version=12.2]
PP_Var GetDeviceID([in] PP_Instance instance);
};
#inline c
......
......@@ -3,7 +3,7 @@
* found in the LICENSE file.
*/
/* From private/ppb_flash.idl modified Fri Feb 17 15:52:14 2012. */
/* From private/ppb_flash.idl modified Tue Apr 10 15:38:45 2012. */
#ifndef PPAPI_C_PRIVATE_PPB_FLASH_H_
#define PPAPI_C_PRIVATE_PPB_FLASH_H_
......@@ -23,7 +23,8 @@
#define PPB_FLASH_INTERFACE_12_0 "PPB_Flash;12.0"
#define PPB_FLASH_INTERFACE_12_1 "PPB_Flash;12.1"
#define PPB_FLASH_INTERFACE PPB_FLASH_INTERFACE_12_1
#define PPB_FLASH_INTERFACE_12_2 "PPB_Flash;12.2"
#define PPB_FLASH_INTERFACE PPB_FLASH_INTERFACE_12_2
/**
* @file
......@@ -39,7 +40,7 @@
* The <code>PPB_Flash</code> interface contains pointers to various functions
* that are only needed to support Pepper Flash.
*/
struct PPB_Flash_12_1 {
struct PPB_Flash_12_2 {
/**
* Sets or clears the rendering hint that the given plugin instance is always
* on top of page content. Somewhat more optimized painting can be used in
......@@ -122,9 +123,13 @@ struct PPB_Flash_12_1 {
* in.
*/
void (*UpdateActivity)(PP_Instance instance);
/**
* Returns the device ID as a string. Returns a PP_VARTYPE_UNDEFINED on error.
*/
struct PP_Var (*GetDeviceID)(PP_Instance instance);
};
typedef struct PPB_Flash_12_1 PPB_Flash;
typedef struct PPB_Flash_12_2 PPB_Flash;
struct PPB_Flash_12_0 {
void (*SetInstanceAlwaysOnTop)(PP_Instance instance, PP_Bool on_top);
......@@ -149,6 +154,33 @@ struct PPB_Flash_12_0 {
struct PP_Var (*GetCommandLineArgs)(PP_Module module);
void (*PreloadFontWin)(const void* logfontw);
};
struct PPB_Flash_12_1 {
void (*SetInstanceAlwaysOnTop)(PP_Instance instance, PP_Bool on_top);
PP_Bool (*DrawGlyphs)(PP_Instance instance,
PP_Resource pp_image_data,
const struct PP_FontDescription_Dev* font_desc,
uint32_t color,
const struct PP_Point* position,
const struct PP_Rect* clip,
const float transformation[3][3],
PP_Bool allow_subpixel_aa,
uint32_t glyph_count,
const uint16_t glyph_indices[],
const struct PP_Point glyph_advances[]);
struct PP_Var (*GetProxyForURL)(PP_Instance instance, const char* url);
int32_t (*Navigate)(PP_Resource request_info,
const char* target,
PP_Bool from_user_action);
void (*RunMessageLoop)(PP_Instance instance);
void (*QuitMessageLoop)(PP_Instance instance);
double (*GetLocalTimeZoneOffset)(PP_Instance instance, PP_Time t);
struct PP_Var (*GetCommandLineArgs)(PP_Module module);
void (*PreloadFontWin)(const void* logfontw);
PP_Bool (*IsRectTopmost)(PP_Instance instance, const struct PP_Rect* rect);
int32_t (*InvokePrinting)(PP_Instance instance);
void (*UpdateActivity)(PP_Instance instance);
};
/**
* @}
*/
......
......@@ -21,8 +21,12 @@ namespace pp {
namespace {
template <> const char* interface_name<PPB_Flash>() {
return PPB_FLASH_INTERFACE;
template <> const char* interface_name<PPB_Flash_12_2>() {
return PPB_FLASH_INTERFACE_12_2;
}
template <> const char* interface_name<PPB_Flash_12_1>() {
return PPB_FLASH_INTERFACE_12_1;
}
template <> const char* interface_name<PPB_Flash_12_0>() {
......@@ -39,7 +43,8 @@ namespace flash {
// static
bool Flash::IsAvailable() {
return has_interface<PPB_Flash>() ||
return has_interface<PPB_Flash_12_2>() ||
has_interface<PPB_Flash_12_1>() ||
has_interface<PPB_Flash_12_0>() ||
has_interface<PPB_Flash_11>();
}
......@@ -47,9 +52,12 @@ bool Flash::IsAvailable() {
// static
void Flash::SetInstanceAlwaysOnTop(const InstanceHandle& instance,
bool on_top) {
if (has_interface<PPB_Flash>()) {
get_interface<PPB_Flash>()->SetInstanceAlwaysOnTop(instance.pp_instance(),
PP_FromBool(on_top));
if (has_interface<PPB_Flash_12_2>()) {
get_interface<PPB_Flash_12_2>()->SetInstanceAlwaysOnTop(
instance.pp_instance(), PP_FromBool(on_top));
} else if (has_interface<PPB_Flash_12_1>()) {
get_interface<PPB_Flash_12_1>()->SetInstanceAlwaysOnTop(
instance.pp_instance(), PP_FromBool(on_top));
} else if (has_interface<PPB_Flash_12_0>()) {
get_interface<PPB_Flash_12_0>()->SetInstanceAlwaysOnTop(
instance.pp_instance(), PP_FromBool(on_top));
......@@ -72,8 +80,21 @@ bool Flash::DrawGlyphs(const InstanceHandle& instance,
const uint16_t glyph_indices[],
const PP_Point glyph_advances[]) {
bool rv = false;
if (has_interface<PPB_Flash>()) {
rv = PP_ToBool(get_interface<PPB_Flash>()->DrawGlyphs(
if (has_interface<PPB_Flash_12_2>()) {
rv = PP_ToBool(get_interface<PPB_Flash_12_2>()->DrawGlyphs(
instance.pp_instance(),
image->pp_resource(),
&font_desc.pp_font_description(),
color,
&position.pp_point(),
&clip.pp_rect(),
transformation,
PP_FromBool(allow_subpixel_aa),
glyph_count,
glyph_indices,
glyph_advances));
} else if (has_interface<PPB_Flash_12_1>()) {
rv = PP_ToBool(get_interface<PPB_Flash_12_1>()->DrawGlyphs(
instance.pp_instance(),
image->pp_resource(),
&font_desc.pp_font_description(),
......@@ -118,10 +139,14 @@ bool Flash::DrawGlyphs(const InstanceHandle& instance,
Var Flash::GetProxyForURL(const InstanceHandle& instance,
const std::string& url) {
Var rv;
if (has_interface<PPB_Flash>()) {
if (has_interface<PPB_Flash_12_2>()) {
rv = Var(PASS_REF,
get_interface<PPB_Flash_12_2>()->GetProxyForURL(
instance.pp_instance(), url.c_str()));
} else if (has_interface<PPB_Flash_12_1>()) {
rv = Var(PASS_REF,
get_interface<PPB_Flash>()->GetProxyForURL(instance.pp_instance(),
url.c_str()));
get_interface<PPB_Flash_12_1>()->GetProxyForURL(
instance.pp_instance(), url.c_str()));
} else if (has_interface<PPB_Flash_12_0>()) {
rv = Var(PASS_REF,
get_interface<PPB_Flash_12_0>()->GetProxyForURL(
......@@ -139,10 +164,16 @@ int32_t Flash::Navigate(const URLRequestInfo& request_info,
const std::string& target,
bool from_user_action) {
int32_t rv = PP_ERROR_FAILED;
if (has_interface<PPB_Flash>()) {
rv = get_interface<PPB_Flash>()->Navigate(request_info.pp_resource(),
target.c_str(),
PP_FromBool(from_user_action));
if (has_interface<PPB_Flash_12_2>()) {
rv = get_interface<PPB_Flash_12_2>()->Navigate(
request_info.pp_resource(),
target.c_str(),
PP_FromBool(from_user_action));
} else if (has_interface<PPB_Flash_12_1>()) {
rv = get_interface<PPB_Flash_12_1>()->Navigate(
request_info.pp_resource(),
target.c_str(),
PP_FromBool(from_user_action));
} else if (has_interface<PPB_Flash_12_0>()) {
rv = get_interface<PPB_Flash_12_0>()->Navigate(
request_info.pp_resource(),
......@@ -158,8 +189,10 @@ int32_t Flash::Navigate(const URLRequestInfo& request_info,
// static
void Flash::RunMessageLoop(const InstanceHandle& instance) {
if (has_interface<PPB_Flash>())
get_interface<PPB_Flash>()->RunMessageLoop(instance.pp_instance());
if (has_interface<PPB_Flash_12_2>())
get_interface<PPB_Flash_12_2>()->RunMessageLoop(instance.pp_instance());
else if (has_interface<PPB_Flash_12_1>())
get_interface<PPB_Flash_12_1>()->RunMessageLoop(instance.pp_instance());
else if (has_interface<PPB_Flash_12_0>())
get_interface<PPB_Flash_12_0>()->RunMessageLoop(instance.pp_instance());
else if (has_interface<PPB_Flash_11>())
......@@ -168,8 +201,10 @@ void Flash::RunMessageLoop(const InstanceHandle& instance) {
// static
void Flash::QuitMessageLoop(const InstanceHandle& instance) {
if (has_interface<PPB_Flash>())
get_interface<PPB_Flash>()->QuitMessageLoop(instance.pp_instance());
if (has_interface<PPB_Flash_12_2>())
get_interface<PPB_Flash_12_2>()->QuitMessageLoop(instance.pp_instance());
else if (has_interface<PPB_Flash_12_1>())
get_interface<PPB_Flash_12_1>()->QuitMessageLoop(instance.pp_instance());
else if (has_interface<PPB_Flash_12_0>())
get_interface<PPB_Flash_12_0>()->QuitMessageLoop(instance.pp_instance());
else if (has_interface<PPB_Flash_11>())
......@@ -180,8 +215,11 @@ void Flash::QuitMessageLoop(const InstanceHandle& instance) {
double Flash::GetLocalTimeZoneOffset(const InstanceHandle& instance,
PP_Time t) {
double rv = 0;
if (has_interface<PPB_Flash>()) {
rv = get_interface<PPB_Flash>()->GetLocalTimeZoneOffset(
if (has_interface<PPB_Flash_12_2>()) {
rv = get_interface<PPB_Flash_12_2>()->GetLocalTimeZoneOffset(
instance.pp_instance(), t);
} else if (has_interface<PPB_Flash_12_1>()) {
rv = get_interface<PPB_Flash_12_1>()->GetLocalTimeZoneOffset(
instance.pp_instance(), t);
} else if (has_interface<PPB_Flash_12_0>()) {
rv = get_interface<PPB_Flash_12_0>()->GetLocalTimeZoneOffset(
......@@ -196,9 +234,13 @@ double Flash::GetLocalTimeZoneOffset(const InstanceHandle& instance,
// static
Var Flash::GetCommandLineArgs(Module* module) {
Var rv;
if (has_interface<PPB_Flash>()) {
if (has_interface<PPB_Flash_12_2>()) {
rv = Var(PASS_REF,
get_interface<PPB_Flash>()->GetCommandLineArgs(
get_interface<PPB_Flash_12_2>()->GetCommandLineArgs(
module->pp_module()));
} else if (has_interface<PPB_Flash_12_1>()) {
rv = Var(PASS_REF,
get_interface<PPB_Flash_12_1>()->GetCommandLineArgs(
module->pp_module()));
} else if (has_interface<PPB_Flash_12_0>()) {
rv = Var(PASS_REF,
......@@ -214,8 +256,10 @@ Var Flash::GetCommandLineArgs(Module* module) {
// static
void Flash::PreloadFontWin(const void* logfontw) {
if (has_interface<PPB_Flash>())
get_interface<PPB_Flash>()->PreloadFontWin(logfontw);
if (has_interface<PPB_Flash_12_2>())
get_interface<PPB_Flash_12_2>()->PreloadFontWin(logfontw);
else if (has_interface<PPB_Flash_12_1>())
get_interface<PPB_Flash_12_1>()->PreloadFontWin(logfontw);
else if (has_interface<PPB_Flash_12_0>())
get_interface<PPB_Flash_12_0>()->PreloadFontWin(logfontw);
}
......@@ -223,8 +267,11 @@ void Flash::PreloadFontWin(const void* logfontw) {
// static
bool Flash::IsRectTopmost(const InstanceHandle& instance, const Rect& rect) {
bool rv = false;
if (has_interface<PPB_Flash>()) {
rv = PP_ToBool(get_interface<PPB_Flash>()->IsRectTopmost(
if (has_interface<PPB_Flash_12_2>()) {
rv = PP_ToBool(get_interface<PPB_Flash_12_2>()->IsRectTopmost(
instance.pp_instance(), &rect.pp_rect()));
} else if (has_interface<PPB_Flash_12_1>()) {
rv = PP_ToBool(get_interface<PPB_Flash_12_1>()->IsRectTopmost(
instance.pp_instance(), &rect.pp_rect()));
}
return rv;
......@@ -233,15 +280,32 @@ bool Flash::IsRectTopmost(const InstanceHandle& instance, const Rect& rect) {
// static
int32_t Flash::InvokePrinting(const InstanceHandle& instance) {
int32_t rv = PP_ERROR_NOTSUPPORTED;
if (has_interface<PPB_Flash>())
rv = get_interface<PPB_Flash>()->InvokePrinting(instance.pp_instance());
if (has_interface<PPB_Flash_12_2>()) {
rv = get_interface<PPB_Flash_12_2>()->InvokePrinting(
instance.pp_instance());
} else if (has_interface<PPB_Flash_12_1>()) {
rv = get_interface<PPB_Flash_12_1>()->InvokePrinting(
instance.pp_instance());
}
return rv;
}
// static
void Flash::UpdateActivity(const InstanceHandle& instance) {
if (has_interface<PPB_Flash>())
get_interface<PPB_Flash>()->UpdateActivity(instance.pp_instance());
if (has_interface<PPB_Flash_12_2>())
get_interface<PPB_Flash_12_2>()->UpdateActivity(instance.pp_instance());
if (has_interface<PPB_Flash_12_1>())
get_interface<PPB_Flash_12_1>()->UpdateActivity(instance.pp_instance());
}
// static
Var Flash::GetDeviceID(const InstanceHandle& instance) {
if (has_interface<PPB_Flash_12_2>()) {
return Var(
PASS_REF,
get_interface<PPB_Flash_12_2>()->GetDeviceID(instance.pp_instance()));
}
return Var();
}
} // namespace flash
......
......@@ -57,7 +57,7 @@ class Flash {
static bool IsRectTopmost(const InstanceHandle& instance, const Rect& rect);
static int32_t InvokePrinting(const InstanceHandle& instance);
static void UpdateActivity(const InstanceHandle& instance);
static Var GetDeviceID(const InstanceHandle& instance);
};
} // namespace flash
......
......@@ -300,6 +300,8 @@ void InterfaceList::AddFlashInterfaces() {
PPB_Flash_Proxy::GetInterface12_0());
AddPPB(PPB_FLASH_INTERFACE_12_1, API_ID_PPB_FLASH,
PPB_Flash_Proxy::GetInterface12_1());
AddPPB(PPB_FLASH_INTERFACE_12_2, API_ID_PPB_FLASH,
PPB_Flash_Proxy::GetInterface12_2());
AddProxy(API_ID_PPB_FLASH_CLIPBOARD,
&ProxyFactory<PPB_Flash_Clipboard_Proxy>);
......
......@@ -222,6 +222,11 @@ void UpdateActivity(PP_Instance instance) {
// TODO(viettrungluu): Implement me.
}
PP_Var GetDeviceID(PP_Instance instance) {
// TODO(brettw) implement me.
return PP_MakeUndefined();
}
const PPB_Flash_11 flash_interface_11 = {
&SetInstanceAlwaysOnTop,
&DrawGlyphs11,
......@@ -260,6 +265,22 @@ const PPB_Flash_12_1 flash_interface_12_1 = {
&UpdateActivity
};
const PPB_Flash_12_2 flash_interface_12_2 = {
&SetInstanceAlwaysOnTop,
&DrawGlyphs,
&GetProxyForURL,
&Navigate,
&RunMessageLoop,
&QuitMessageLoop,
&GetLocalTimeZoneOffset,
&GetCommandLineArgs,
&PreLoadFontWin,
&IsRectTopmost,
&InvokePrinting,
&UpdateActivity,
&GetDeviceID
};
} // namespace
PPB_Flash_Proxy::PPB_Flash_Proxy(Dispatcher* dispatcher)
......@@ -288,6 +309,11 @@ const PPB_Flash_12_1* PPB_Flash_Proxy::GetInterface12_1() {
return &flash_interface_12_1;
}
// static
const PPB_Flash_12_2* PPB_Flash_Proxy::GetInterface12_2() {
return &flash_interface_12_2;
}
bool PPB_Flash_Proxy::OnMessageReceived(const IPC::Message& msg) {
// Prevent the dispatcher from going away during a call to Navigate.
// This must happen OUTSIDE of OnMsgNavigate since the handling code use
......
......@@ -35,6 +35,7 @@ class PPB_Flash_Proxy : public InterfaceProxy {
static const PPB_Flash_11* GetInterface11();
static const PPB_Flash_12_0* GetInterface12_0();
static const PPB_Flash_12_1* GetInterface12_1();
static const PPB_Flash_12_2* GetInterface12_2();
// InterfaceProxy implementation.
virtual bool OnMessageReceived(const IPC::Message& msg);
......
......@@ -316,6 +316,8 @@ const void* GetInterface(const char* name) {
return PPB_Flash_Impl::GetInterface12_0();
if (strcmp(name, PPB_FLASH_INTERFACE_12_1) == 0)
return PPB_Flash_Impl::GetInterface12_1();
if (strcmp(name, PPB_FLASH_INTERFACE_12_2) == 0)
return PPB_Flash_Impl::GetInterface12_2();
if (strcmp(name, PPB_FLASH_CLIPBOARD_INTERFACE_4_0) == 0)
return ::ppapi::thunk::GetPPB_Flash_Clipboard_4_0_Thunk();
if (strcmp(name, PPB_FLASH_CLIPBOARD_INTERFACE_3_0) == 0)
......
......@@ -266,6 +266,11 @@ void UpdateActivity(PP_Instance pp_instance) {
// TODO(viettrungluu): Implement me.
}
PP_Var GetDeviceID(PP_Instance pp_instance) {
// TODO(brettw) implement me.
return PP_MakeUndefined();
}
const PPB_Flash_11 ppb_flash_11 = {
&SetInstanceAlwaysOnTop,
&DrawGlyphs11,
......@@ -304,6 +309,22 @@ const PPB_Flash_12_1 ppb_flash_12_1 = {
&UpdateActivity
};
const PPB_Flash_12_2 ppb_flash_12_2 = {
&SetInstanceAlwaysOnTop,
&DrawGlyphs,
&GetProxyForURL,
&Navigate,
&RunMessageLoop,
&QuitMessageLoop,
&GetLocalTimeZoneOffset,
&GetCommandLineArgs,
&PreLoadFontWin,
&IsRectTopmost,
&InvokePrinting,
&UpdateActivity,
&GetDeviceID
};
} // namespace
// static
......@@ -321,5 +342,10 @@ const PPB_Flash_12_1* PPB_Flash_Impl::GetInterface12_1() {
return &ppb_flash_12_1;
}
// static
const PPB_Flash_12_2* PPB_Flash_Impl::GetInterface12_2() {
return &ppb_flash_12_2;
}
} // namespace ppapi
} // namespace webkit
......@@ -21,6 +21,7 @@ class PPB_Flash_Impl {
static const PPB_Flash_11* GetInterface11();
static const PPB_Flash_12_0* GetInterface12_0();
static const PPB_Flash_12_1* GetInterface12_1();
static const PPB_Flash_12_2* GetInterface12_2();
private:
DISALLOW_COPY_AND_ASSIGN(PPB_Flash_Impl);
......
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