首页 > 代码库 > cef研究
cef研究
// Copyright (c) 2010 The Chromium Embedded Framework Authors. All rights// reserved. Use of this source code is governed by a BSD-style license that// can be found in the LICENSE file.#include "include/cef.h"#include "include/cef_runnable.h"#include "include/cef_wrapper.h"#include "cefclient.h"#include "client_handler.h"#include "binding_test.h"#include "string_util.h"#include "util.h"#include <sstream>#include <stdio.h>#include <string>CefRefPtr<ClientHandler> g_handler;CefRefPtr<CefBrowser> AppGetBrowser(){ if(!g_handler.get()) return NULL; return g_handler->GetBrowser();}CefWindowHandle AppGetMainHwnd(){ if(!g_handler.get()) return NULL; return g_handler->GetMainHwnd();}static void ExecuteGetSource(CefRefPtr<CefFrame> frame){ // Retrieve the current page source and display. std::string source = frame->GetSource(); source = StringReplace(source, "<", "<"); source = StringReplace(source, ">", ">"); std::stringstream ss; ss << "<html><body>Source:" << "<pre>" << source << "</pre></body></html>"; frame->LoadString(ss.str(), "http://tests/getsource");}void RunGetSourceTest(CefRefPtr<CefBrowser> browser){ // Execute the GetSource() call on the UI thread. CefPostTask(TID_UI, NewCefRunnableFunction(&ExecuteGetSource, browser->GetMainFrame()));}static void ExecuteGetText(CefRefPtr<CefFrame> frame){ std::string text = frame->GetText(); text = StringReplace(text, "<", "<"); text = StringReplace(text, ">", ">"); std::stringstream ss; ss << "<html><body>Text:" << "<pre>" << text << "</pre></body></html>"; frame->LoadString(ss.str(), "http://tests/gettext");}void RunGetTextTest(CefRefPtr<CefBrowser> browser){ // Execute the GetText() call on the UI thread. CefPostTask(TID_UI, NewCefRunnableFunction(&ExecuteGetText, browser->GetMainFrame()));}void RunRequestTest(CefRefPtr<CefBrowser> browser){ // Create a new request CefRefPtr<CefRequest> request(CefRequest::CreateRequest()); // Set the request URL request->SetURL("http://tests/request"); // Add post data to the request. The correct method and content- // type headers will be set by CEF. CefRefPtr<CefPostDataElement> postDataElement( CefPostDataElement::CreatePostDataElement()); std::string data = "http://www.mamicode.com/arg1=val1&arg2=val2"; postDataElement->SetToBytes(data.length(), data.c_str()); CefRefPtr<CefPostData> postData(CefPostData::CreatePostData()); postData->AddElement(postDataElement); request->SetPostData(postData); // Add a custom header CefRequest::HeaderMap headerMap; headerMap.insert( std::make_pair("X-My-Header", "My Header Value")); request->SetHeaderMap(headerMap); // Load the request browser->GetMainFrame()->LoadRequest(request);}void RunJavaScriptExecuteTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->ExecuteJavaScript( "alert(‘JavaScript execute works!‘);", "about:blank", 0);}void RunPopupTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->ExecuteJavaScript( "window.open(‘http://www.google.com‘);", "about:blank", 0);}void RunLocalStorageTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->LoadURL("http://tests/localstorage");}void RunAccelerated2DCanvasTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->LoadURL( "http://mudcu.be/labs/JS1k/BreathingGalaxies.html");}void RunAcceleratedLayersTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->LoadURL( "http://webkit.org/blog-files/3d-transforms/poster-circle.html");}void RunWebGLTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->LoadURL( "http://webglsamples.googlecode.com/hg/field/field.html");}void RunHTML5VideoTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->LoadURL( "http://www.youtube.com/watch?v=siOHh0uzcuY&html5=True");}void RunXMLHTTPRequestTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->LoadURL("http://tests/xmlhttprequest");}void RunWebURLRequestTest(CefRefPtr<CefBrowser> browser){ class RequestClient : public CefWebURLRequestClient { public: RequestClient(CefRefPtr<CefBrowser> browser) : browser_(browser) {} virtual void OnStateChange(CefRefPtr<CefWebURLRequest> requester, RequestState state) { REQUIRE_UI_THREAD(); if (state == WUR_STATE_DONE) { buffer_ = StringReplace(buffer_, "<", "<"); buffer_ = StringReplace(buffer_, ">", ">"); std::stringstream ss; ss << "<html><body>Source:<pre>" << buffer_ << "</pre></body></html>"; browser_->GetMainFrame()->LoadString(ss.str(), "http://tests/weburlrequest"); } } virtual void OnRedirect(CefRefPtr<CefWebURLRequest> requester, CefRefPtr<CefRequest> request, CefRefPtr<CefResponse> response) { REQUIRE_UI_THREAD(); } virtual void OnHeadersReceived(CefRefPtr<CefWebURLRequest> requester, CefRefPtr<CefResponse> response) { REQUIRE_UI_THREAD(); } virtual void OnProgress(CefRefPtr<CefWebURLRequest> requester, uint64 bytesSent, uint64 totalBytesToBeSent) { REQUIRE_UI_THREAD(); } virtual void OnData(CefRefPtr<CefWebURLRequest> requester, const void* data, int dataLength) { REQUIRE_UI_THREAD(); buffer_.append(static_cast<const char*>(data), dataLength); } virtual void one rror(CefRefPtr<CefWebURLRequest> requester, ErrorCode errorCode) { REQUIRE_UI_THREAD(); std::stringstream ss; ss << "Load failed with error code " << errorCode; browser_->GetMainFrame()->LoadString(ss.str(), "http://tests/weburlrequest"); } protected: CefRefPtr<CefBrowser> browser_; std::string buffer_; IMPLEMENT_REFCOUNTING(CefWebURLRequestClient); }; CefRefPtr<CefRequest> request(CefRequest::CreateRequest()); request->SetURL("http://www.google.com"); CefRefPtr<CefWebURLRequestClient> client(new RequestClient(browser)); CefRefPtr<CefWebURLRequest> requester( CefWebURLRequest::CreateWebURLRequest(request, client));}void RunDOMAccessTest(CefRefPtr<CefBrowser> browser){ class Listener : public CefDOMEventListener { public: Listener() {} virtual void HandleEvent(CefRefPtr<CefDOMEvent> event) { CefRefPtr<CefDOMDocument> document = event->GetDocument(); ASSERT(document.get()); std::stringstream ss; CefRefPtr<CefDOMNode> button = event->GetTarget(); ASSERT(button.get()); std::string buttonValue = http://www.mamicode.com/button->GetElementAttribute("value"); ss << "You clicked the " << buttonValue.c_str() << " button. "; if (document->HasSelection()) { std::string startName, endName; // Determine the start name by first trying to locate the "id" attribute // and then defaulting to the tag name. { CefRefPtr<CefDOMNode> node = document->GetSelectionStartNode(); if (!node->IsElement()) node = node->GetParent(); if (node->IsElement() && node->HasElementAttribute("id")) startName = node->GetElementAttribute("id"); else startName = node->GetName(); } // Determine the end name by first trying to locate the "id" attribute // and then defaulting to the tag name. { CefRefPtr<CefDOMNode> node = document->GetSelectionEndNode(); if (!node->IsElement()) node = node->GetParent(); if (node->IsElement() && node->HasElementAttribute("id")) endName = node->GetElementAttribute("id"); else endName = node->GetName(); } ss << "The selection is from " << startName.c_str() << ":" << document->GetSelectionStartOffset() << " to " << endName.c_str() << ":" << document->GetSelectionEndOffset(); } else { ss << "Nothing is selected."; } // Update the description. CefRefPtr<CefDOMNode> desc = document->GetElementById("description"); ASSERT(desc.get()); CefRefPtr<CefDOMNode> text = desc->GetFirstChild(); ASSERT(text.get()); ASSERT(text->IsText()); text->SetValue(ss.str()); } IMPLEMENT_REFCOUNTING(Listener); }; class Visitor : public CefDOMVisitor { public: Visitor() {} virtual void Visit(CefRefPtr<CefDOMDocument> document) { // Register an click listener for the button. CefRefPtr<CefDOMNode> button = document->GetElementById("button"); ASSERT(button.get()); button->AddEventListener("click", new Listener(), false); } IMPLEMENT_REFCOUNTING(Visitor); }; // The DOM visitor will be called after the path is loaded. CefRefPtr<CefClient> client = browser->GetClient(); static_cast<ClientHandler*>(client.get())->AddDOMVisitor( "http://tests/domaccess", new Visitor()); browser->GetMainFrame()->LoadURL("http://tests/domaccess");}void RunDragDropTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->LoadURL("http://html5demos.com/drag");}void RunModalDialogTest(CefRefPtr<CefBrowser> browser){ browser->GetMainFrame()->LoadURL("http://tests/modalmain");}
cef研究
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。