diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-14 23:40:41 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-14 23:40:41 +0000 |
commit | 4c29efd402105cd29908d21550829bc089a8fe36 (patch) | |
tree | e2e2ac0f5a5d47db3417c1e85205c57ede5e7cb8 /chrome/renderer/render_view_unittest.cc | |
parent | 5ea8fc38c5cc261077b61469d8ccb158f3e347b8 (diff) | |
download | chromium_src-4c29efd402105cd29908d21550829bc089a8fe36.zip chromium_src-4c29efd402105cd29908d21550829bc089a8fe36.tar.gz chromium_src-4c29efd402105cd29908d21550829bc089a8fe36.tar.bz2 |
Add JsonSchema-based validation for the tab APIs.
Arv: can you take json_schema.js and json_schema_test.js.
Matt: you take the rest.
Review URL: http://codereview.chromium.org/66006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13720 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_view_unittest.cc')
-rw-r--r-- | chrome/renderer/render_view_unittest.cc | 187 |
1 files changed, 1 insertions, 186 deletions
diff --git a/chrome/renderer/render_view_unittest.cc b/chrome/renderer/render_view_unittest.cc index f28b8d0..3be31bd 100644 --- a/chrome/renderer/render_view_unittest.cc +++ b/chrome/renderer/render_view_unittest.cc @@ -2,107 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/scoped_ptr.h" #include "chrome/common/render_messages.h" -#include "chrome/renderer/extensions/event_bindings.h" -#include "chrome/renderer/extensions/renderer_extension_bindings.h" -#include "chrome/renderer/js_only_v8_extensions.h" -#include "chrome/renderer/mock_render_process.h" -#include "chrome/renderer/mock_render_thread.h" -#include "chrome/renderer/render_view.h" -#include "chrome/renderer/renderer_webkitclient_impl.h" +#include "chrome/test/render_view_test.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/WebKit/WebKit/chromium/public/WebKit.h" -#include "third_party/WebKit/WebKit/chromium/public/WebScriptSource.h" -#include "webkit/glue/webframe.h" -#include "webkit/glue/weburlrequest.h" -#include "webkit/glue/webview.h" - -using WebKit::WebScriptSource; -using WebKit::WebString; - -namespace { - -const int32 kRouteId = 5; -const int32 kOpenerId = 7; - -}; - -class RenderViewTest : public testing::Test { - public: - RenderViewTest() {} - ~RenderViewTest() {} - - protected: - // Spins the message loop to process all messages that are currently pending. - void ProcessPendingMessages() { - msg_loop_.PostTask(FROM_HERE, new MessageLoop::QuitTask()); - msg_loop_.Run(); - } - - // Returns a pointer to the main frame. - WebFrame* GetMainFrame() { - return view_->webview()->GetMainFrame(); - } - - // Executes the given JavaScript in the context of the main frame. The input - // is a NULL-terminated UTF-8 string. - void ExecuteJavaScript(const char* js) { - GetMainFrame()->ExecuteScript(WebScriptSource(WebString::fromUTF8(js))); - } - - // Loads the given HTML into the main frame as a data: URL. - void LoadHTML(const char* html) { - std::string url_str = "data:text/html;charset=utf-8,"; - url_str.append(html); - GURL url(url_str); - - scoped_ptr<WebRequest> request(WebRequest::Create(url)); - GetMainFrame()->LoadRequest(request.get()); - - // The load actually happens asynchronously, so we pump messages to process - // the pending continuation. - ProcessPendingMessages(); - } - - // testing::Test - virtual void SetUp() { - WebKit::initialize(&webkitclient_); - WebKit::registerExtension(BaseJsV8Extension::Get()); - WebKit::registerExtension(JsonJsV8Extension::Get()); - WebKit::registerExtension(EventBindings::Get()); - WebKit::registerExtension(RendererExtensionBindings::Get(&render_thread_)); - - mock_process_.reset(new MockProcess()); - - render_thread_.set_routing_id(kRouteId); - - // This needs to pass the mock render thread to the view. - view_ = RenderView::Create(&render_thread_, NULL, NULL, kOpenerId, - WebPreferences(), - new SharedRenderViewCounter(0), kRouteId); - } - virtual void TearDown() { - render_thread_.SendCloseMessage(); - - // Run the loop so the release task from the renderwidget executes. - ProcessPendingMessages(); - - view_ = NULL; - - mock_process_.reset(); - WebKit::shutdown(); - - msg_loop_.RunAllPending(); - } - - MessageLoop msg_loop_; - MockRenderThread render_thread_; - scoped_ptr<MockProcess> mock_process_; - scoped_refptr<RenderView> view_; - RendererWebKitClientImpl webkitclient_; -}; - TEST_F(RenderViewTest, OnLoadAlternateHTMLText) { // Test a new navigation. @@ -374,90 +276,3 @@ TEST_F(RenderViewTest, OnSetTextDirection) { EXPECT_EQ(output, kTextDirection[i].expected_result); } } - -// Tests that the bindings for opening a channel to an extension and sending -// and receiving messages through that channel all works. -TEST_F(RenderViewTest, ExtensionMessagesOpenChannel) { - render_thread_.sink().ClearMessages(); - LoadHTML("<body></body>"); - ExecuteJavaScript( - "var e = new chromium.Extension('foobar');" - "var port = e.connect();" - "port.onmessage.addListener(doOnMessage);" - "port.postMessage({message: 'content ready'});" - "function doOnMessage(msg, port) {" - " alert('content got: ' + msg.val);" - "}"); - - // Verify that we opened a channel and sent a message through it. - const IPC::Message* open_channel_msg = - render_thread_.sink().GetUniqueMessageMatching( - ViewHostMsg_OpenChannelToExtension::ID); - EXPECT_TRUE(open_channel_msg); - - const IPC::Message* post_msg = - render_thread_.sink().GetUniqueMessageMatching( - ViewHostMsg_ExtensionPostMessage::ID); - ASSERT_TRUE(post_msg); - ViewHostMsg_ExtensionPostMessage::Param post_params; - ViewHostMsg_ExtensionPostMessage::Read(post_msg, &post_params); - EXPECT_EQ("{\"message\":\"content ready\"}", post_params.b); - - // Now simulate getting a message back from the other side. - render_thread_.sink().ClearMessages(); - const int kPortId = 0; - RendererExtensionBindings::HandleMessage("{\"val\": 42}", kPortId); - - // Verify that we got it. - const IPC::Message* alert_msg = - render_thread_.sink().GetUniqueMessageMatching( - ViewHostMsg_RunJavaScriptMessage::ID); - ASSERT_TRUE(alert_msg); - void* iter = IPC::SyncMessage::GetDataIterator(alert_msg); - ViewHostMsg_RunJavaScriptMessage::SendParam alert_param; - IPC::ReadParam(alert_msg, &iter, &alert_param); - EXPECT_EQ(L"content got: 42", alert_param.a); -} - -// Tests that the bindings for handling a new channel connection and sending -// and receiving messages through that channel all works. -TEST_F(RenderViewTest, ExtensionMessagesOnConnect) { - LoadHTML("<body></body>"); - ExecuteJavaScript( - "chromium.onconnect.addListener(function (port) {" - " port.onmessage.addListener(doOnMessage);" - " port.postMessage({message: 'onconnect'});" - "});" - "function doOnMessage(msg, port) {" - " alert('got: ' + msg.val);" - "}"); - - render_thread_.sink().ClearMessages(); - - // Simulate a new connection being opened. - const int kPortId = 0; - RendererExtensionBindings::HandleConnect(kPortId); - - // Verify that we handled the new connection by posting a message. - const IPC::Message* post_msg = - render_thread_.sink().GetUniqueMessageMatching( - ViewHostMsg_ExtensionPostMessage::ID); - ASSERT_TRUE(post_msg); - ViewHostMsg_ExtensionPostMessage::Param post_params; - ViewHostMsg_ExtensionPostMessage::Read(post_msg, &post_params); - EXPECT_EQ("{\"message\":\"onconnect\"}", post_params.b); - - // Now simulate getting a message back from the channel opener. - render_thread_.sink().ClearMessages(); - RendererExtensionBindings::HandleMessage("{\"val\": 42}", kPortId); - - // Verify that we got it. - const IPC::Message* alert_msg = - render_thread_.sink().GetUniqueMessageMatching( - ViewHostMsg_RunJavaScriptMessage::ID); - ASSERT_TRUE(alert_msg); - void* iter = IPC::SyncMessage::GetDataIterator(alert_msg); - ViewHostMsg_RunJavaScriptMessage::SendParam alert_param; - IPC::ReadParam(alert_msg, &iter, &alert_param); - EXPECT_EQ(L"got: 42", alert_param.a); -} |