diff options
author | mball@google.com <mball@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-08 18:56:35 +0000 |
---|---|---|
committer | mball@google.com <mball@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-08 18:56:35 +0000 |
commit | 7035fadbfed5d340b54d3f92d8b9781ee95f9bab (patch) | |
tree | 127d64153850ac827b26538f8096899563273ff3 /native_client_sdk | |
parent | d77e93b3597bf8e17a0a90cea7e197bb654e4146 (diff) | |
download | chromium_src-7035fadbfed5d340b54d3f92d8b9781ee95f9bab.zip chromium_src-7035fadbfed5d340b54d3f92d8b9781ee95f9bab.tar.gz chromium_src-7035fadbfed5d340b54d3f92d8b9781ee95f9bab.tar.bz2 |
Fixed set_nacl_env_test for changes to utf8 conversion in ppapi
TBR=bradnelson, noelallen
Review URL: http://codereview.chromium.org/8885015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113633 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'native_client_sdk')
3 files changed, 4 insertions, 288 deletions
diff --git a/native_client_sdk/src/build_tools/tests/set_nacl_env_test.py b/native_client_sdk/src/build_tools/tests/set_nacl_env_test.py index f1ad4e7..b36cc0d 100755 --- a/native_client_sdk/src/build_tools/tests/set_nacl_env_test.py +++ b/native_client_sdk/src/build_tools/tests/set_nacl_env_test.py @@ -93,6 +93,9 @@ class TestSetNaclEnv(unittest.TestCase): src_dir = os.path.join(SCRIPT_DIR, 'set_nacl_env_test_archive') for file in glob.iglob(os.path.join(src_dir, '*')): shutil.copy2(file, self._temp_dir) + shutil.copy2(os.path.join(SDK_ROOT_DIR, 'examples', 'hello_world_c', + 'hello_world_c.c'), + self._temp_dir) script = os.path.join(SDK_ROOT_DIR, 'build_tools', 'sdk_tools', 'set_nacl_env.py') diff --git a/native_client_sdk/src/build_tools/tests/set_nacl_env_test_archive/Makefile b/native_client_sdk/src/build_tools/tests/set_nacl_env_test_archive/Makefile index 7db0ce7..0f34e74 100644 --- a/native_client_sdk/src/build_tools/tests/set_nacl_env_test_archive/Makefile +++ b/native_client_sdk/src/build_tools/tests/set_nacl_env_test_archive/Makefile @@ -10,7 +10,7 @@ all : $(EXAMPLE) clean : rm -f $(EXAMPLE) hello_world_c.o hello_world_c.nexe -SRCS_ = $(EXAMPLE_DIR)/*.c +SRCS_ = $(EXAMPLE_DIR)/hello_world_c.c hello_world_c.o : $(SRCS_) $(CXX) $(CPPFLAGS) -I$(EXAMPLE_DIR) $(CXXFLAGS) -c \ diff --git a/native_client_sdk/src/build_tools/tests/set_nacl_env_test_archive/hello_world_c.c b/native_client_sdk/src/build_tools/tests/set_nacl_env_test_archive/hello_world_c.c deleted file mode 100644 index 939e724..0000000 --- a/native_client_sdk/src/build_tools/tests/set_nacl_env_test_archive/hello_world_c.c +++ /dev/null @@ -1,287 +0,0 @@ -/* Copyright (c) 2011 The Native Client Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/** @file hello_world.c - * This example demonstrates loading, running and scripting a very simple - * NaCl module. - */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "ppapi/c/pp_errors.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/c/ppb.h" -#include "ppapi/c/ppb_instance.h" -#include "ppapi/c/ppb_messaging.h" -#include "ppapi/c/ppb_var.h" -#include "ppapi/c/ppp.h" -#include "ppapi/c/ppp_instance.h" -#include "ppapi/c/ppp_messaging.h" - -struct MessageInfo { - PP_Instance instance; - struct PP_Var message; -}; - -static const char* const kReverseTextMethodId = "reverseText"; -static const char* const kFortyTwoMethodId = "fortyTwo"; -static const char kMessageArgumentSeparator = ':'; -static const char kNullTerminator = '\0'; - -static struct PPB_Messaging* ppb_messaging_interface = NULL; -static struct PPB_Var* ppb_var_interface = NULL; -static PP_Module module_id = 0; - - -/** - * Returns a mutable C string contained in the @a var or NULL if @a var is not - * string. This makes a copy of the string in the @ var and adds a NULL - * terminator. Note that VarToUtf8() does not guarantee the NULL terminator on - * the returned string. See the comments for VatToUtf8() in ppapi/c/ppb_var.h - * for more info. The caller is responsible for freeing the returned memory. - * @param[in] var PP_Var containing string. - * @return a C string representation of @a var. - * @note The caller is responsible for freeing the returned string. - */ -static char* VarToCStr(struct PP_Var var) { - uint32_t len = 0; - if (ppb_var_interface != NULL) { - const char* var_c_str = ppb_var_interface->VarToUtf8(var, &len); - if (len > 0) { - char* c_str = (char*)malloc(len + 1); - memcpy(c_str, var_c_str, len); - c_str[len] = kNullTerminator; - return c_str; - } - } - return NULL; -} - -/** - * Creates new string PP_Var from C string. The resulting object will be a - * refcounted string object. It will be AddRef()ed for the caller. When the - * caller is done with it, it should be Release()d. - * @param[in] str C string to be converted to PP_Var - * @return PP_Var containing string. - */ -static struct PP_Var CStrToVar(const char* str) { - if (ppb_var_interface != NULL) { - return ppb_var_interface->VarFromUtf8(module_id, str, strlen(str)); - } - return PP_MakeUndefined(); -} - -/** - * Reverse C string in-place. - * @param[in,out] str C string to be reversed - */ -static void ReverseStr(char* str) { - char* right = str + strlen(str) - 1; - char* left = str; - while (left < right) { - char tmp = *left; - *left++ = *right; - *right-- = tmp; - } -} - -/** - * A simple function that always returns 42. - * @return always returns the integer 42 - */ -static struct PP_Var FortyTwo() { - return PP_MakeInt32(42); -} - -/** - * Called when the NaCl module is instantiated on the web page. The identifier - * of the new instance will be passed in as the first argument (this value is - * generated by the browser and is an opaque handle). This is called for each - * instantiation of the NaCl module, which is each time the <embed> tag for - * this module is encountered. - * - * If this function reports a failure (by returning @a PP_FALSE), the NaCl - * module will be deleted and DidDestroy will be called. - * @param[in] instance The identifier of the new instance representing this - * NaCl module. - * @param[in] argc The number of arguments contained in @a argn and @a argv. - * @param[in] argn An array of argument names. These argument names are - * supplied in the <embed> tag, for example: - * <embed id="nacl_module" dimensions="2"> - * will produce two arguments, one named "id" and one named "dimensions". - * @param[in] argv An array of argument values. These are the values of the - * arguments listed in the <embed> tag. In the above example, there will - * be two elements in this array, "nacl_module" and "2". The indices of - * these values match the indices of the corresponding names in @a argn. - * @return @a PP_TRUE on success. - */ -static PP_Bool Instance_DidCreate(PP_Instance instance, - uint32_t argc, - const char* argn[], - const char* argv[]) { - return PP_TRUE; -} - -/** - * Called when the NaCl module is destroyed. This will always be called, - * even if DidCreate returned failure. This routine should deallocate any data - * associated with the instance. - * @param[in] instance The identifier of the instance representing this NaCl - * module. - */ -static void Instance_DidDestroy(PP_Instance instance) { -} - -/** - * Called when the position, the size, or the clip rect of the element in the - * browser that corresponds to this NaCl module has changed. - * @param[in] instance The identifier of the instance representing this NaCl - * module. - * @param[in] position The location on the page of this NaCl module. This is - * relative to the top left corner of the viewport, which changes as the - * page is scrolled. - * @param[in] clip The visible region of the NaCl module. This is relative to - * the top left of the plugin's coordinate system (not the page). If the - * plugin is invisible, @a clip will be (0, 0, 0, 0). - */ -static void Instance_DidChangeView(PP_Instance instance, - const struct PP_Rect* position, - const struct PP_Rect* clip) { -} - -/** - * Notification that the given NaCl module has gained or lost focus. - * Having focus means that keyboard events will be sent to the NaCl module - * represented by @a instance. A NaCl module's default condition is that it - * will not have focus. - * - * Note: clicks on NaCl modules will give focus only if you handle the - * click event. You signal if you handled it by returning @a true from - * HandleInputEvent. Otherwise the browser will bubble the event and give - * focus to the element on the page that actually did end up consuming it. - * If you're not getting focus, check to make sure you're returning true from - * the mouse click in HandleInputEvent. - * @param[in] instance The identifier of the instance representing this NaCl - * module. - * @param[in] has_focus Indicates whether this NaCl module gained or lost - * event focus. - */ -static void Instance_DidChangeFocus(PP_Instance instance, - PP_Bool has_focus) { -} - -/** - * Handler that gets called after a full-frame module is instantiated based on - * registered MIME types. This function is not called on NaCl modules. This - * function is essentially a place-holder for the required function pointer in - * the PPP_Instance structure. - * @param[in] instance The identifier of the instance representing this NaCl - * module. - * @param[in] url_loader A PP_Resource an open PPB_URLLoader instance. - * @return PP_FALSE. - */ -static PP_Bool Instance_HandleDocumentLoad(PP_Instance instance, - PP_Resource url_loader) { - /* NaCl modules do not need to handle the document load function. */ - return PP_FALSE; -} - -/** - * Handler for messages coming in from the browser via postMessage. Extracts - * the method call from @a message, parses it for method name and value, then - * calls the appropriate function. In the case of the reverseString method, the - * message format is a simple colon-separated string. The first part of the - * string up to the colon is the method name; after that is the string argument. - * @param[in] instance The instance ID. - * @param[in] message The contents, copied by value, of the message sent from - * browser via postMessage. - */ -void Messaging_HandleMessage(PP_Instance instance, struct PP_Var var_message) { - if (var_message.type != PP_VARTYPE_STRING) { - /* Only handle string messages */ - return; - } - char* message = VarToCStr(var_message); - if (message == NULL) - return; - struct PP_Var var_result = PP_MakeUndefined(); - if (strncmp(message, kFortyTwoMethodId, strlen(kFortyTwoMethodId)) == 0) { - var_result = FortyTwo(); - } else if (strncmp(message, - kReverseTextMethodId, - strlen(kReverseTextMethodId)) == 0) { - /* Use everything after the ':' in |message| as the string argument. */ - char* string_arg = strchr(message, kMessageArgumentSeparator); - if (string_arg != NULL) { - string_arg += 1; /* Advance past the ':' separator. */ - ReverseStr(string_arg); - var_result = CStrToVar(string_arg); - } - } - free(message); - - /* Echo the return result back to browser. Note that HandleMessage is always - * called on the main thread, so it's OK to post the message back to the - * browser directly from here. This return post is asynchronous. - */ - ppb_messaging_interface->PostMessage(instance, var_result); - /* If the message was created using VarFromUtf8() it needs to be released. - * See the comments about VarFromUtf8() in ppapi/c/ppb_var.h for more - * information. - */ - if (var_result.type == PP_VARTYPE_STRING) { - ppb_var_interface->Release(var_result); - } -} - -/** - * Entry points for the module. - * Initialize needed interfaces: PPB_Core, PPB_Messaging and PPB_Var. - * @param[in] a_module_id module ID - * @param[in] get_browser pointer to PPB_GetInterface - * @return PP_OK on success, any other value on failure. - */ -PP_EXPORT int32_t PPP_InitializeModule(PP_Module a_module_id, - PPB_GetInterface get_browser) { - module_id = a_module_id; - ppb_messaging_interface = - (struct PPB_Messaging*)(get_browser(PPB_MESSAGING_INTERFACE)); - ppb_var_interface = (struct PPB_Var*)(get_browser(PPB_VAR_INTERFACE)); - - return PP_OK; -} - -/** - * Returns an interface pointer for the interface of the given name, or NULL - * if the interface is not supported. - * @param[in] interface_name name of the interface - * @return pointer to the interface - */ -PP_EXPORT const void* PPP_GetInterface(const char* interface_name) { - if (strcmp(interface_name, PPP_INSTANCE_INTERFACE) == 0) { - static struct PPP_Instance instance_interface = { - &Instance_DidCreate, - &Instance_DidDestroy, - &Instance_DidChangeView, - &Instance_DidChangeFocus, - &Instance_HandleDocumentLoad, - }; - return &instance_interface; - } else if (strcmp(interface_name, PPP_MESSAGING_INTERFACE) == 0) { - static struct PPP_Messaging messaging_interface = { - &Messaging_HandleMessage - }; - return &messaging_interface; - } - return NULL; -} - -/** - * Called before the plugin module is unloaded. - */ -PP_EXPORT void PPP_ShutdownModule() { -} |