mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
First implementation of C++<->JS comms.
The Help menu item now opens the readme in the default browser.
This commit is contained in:
@@ -193,6 +193,15 @@ function openLogLocation(evt) {
|
||||
}
|
||||
function openReadme(evt) {
|
||||
|
||||
// Create and send a new query.
|
||||
var request_id = window.cefQuery({
|
||||
request: 'openReadme',
|
||||
persistent: false,
|
||||
onSuccess: function(response) {},
|
||||
onFailure: function(error_code, error_message) {
|
||||
alert(error_code + error_message);
|
||||
}
|
||||
});
|
||||
}
|
||||
function updateMasterlist(evt) {
|
||||
|
||||
@@ -575,7 +584,7 @@ function processURLParams() {
|
||||
var activePluginNo = 0;
|
||||
var dirtyPluginNo = 0;
|
||||
/* Fill report with data. */
|
||||
document.getElementById('LOOTVersion').textContent = data.lootVersion;
|
||||
document.getElementById('LOOTVersion').textContent = loot.version;
|
||||
document.getElementById('masterlistRevision').textContent = data.masterlist.revision.substr(0, 9);
|
||||
document.getElementById('masterlistDate').textContent = data.masterlist.date;
|
||||
var generalMessagesList = document.getElementById('generalMessages').getElementsByTagName('ul')[0];
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
var data = {
|
||||
"lootVersion": "0.5.0",
|
||||
"masterlist": {
|
||||
"revision": "f66688fbe946396bc8fa1d5dadb7c8211c189cee",
|
||||
"date": "2014-05-10"
|
||||
|
||||
+17
-1
@@ -68,11 +68,28 @@ namespace loot {
|
||||
CefBrowserHost::CreateBrowser(window_info, handler.get(), url, browser_settings, NULL);
|
||||
}
|
||||
|
||||
void LootApp::OnWebKitInitialized() {
|
||||
// Create the renderer-side router for query handling.
|
||||
CefMessageRouterConfig config;
|
||||
message_router_ = CefMessageRouterRendererSide::Create(config);
|
||||
}
|
||||
|
||||
bool LootApp::OnProcessMessageReceived(
|
||||
CefRefPtr<CefBrowser> browser,
|
||||
CefProcessId source_process,
|
||||
CefRefPtr<CefProcessMessage> message) {
|
||||
// Handle IPC messages from the browser process...
|
||||
return message_router_->OnProcessMessageReceived(browser, source_process, message);
|
||||
}
|
||||
|
||||
|
||||
void LootApp::OnContextCreated(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
CefRefPtr<CefV8Context> context) {
|
||||
|
||||
// Register javascript functions.
|
||||
message_router_->OnContextCreated(browser, frame, context);
|
||||
|
||||
// Retrieve the context's window object.
|
||||
CefRefPtr<CefV8Value> object = context->GetGlobal();
|
||||
|
||||
@@ -85,7 +102,6 @@ namespace loot {
|
||||
|
||||
lootObj->SetValue("version", CefV8Value::CreateString(IntToString(g_version_major) + "." + IntToString(g_version_minor) + "." + IntToString(g_version_patch)), V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
|
||||
// Add the string to the window object as "window.myval". See the "JS Objects" section below.
|
||||
object->SetValue("loot", lootObj, V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
}
|
||||
}
|
||||
+11
-2
@@ -26,6 +26,7 @@
|
||||
#define __LOOT_GUI_APP__
|
||||
|
||||
#include <include/cef_app.h>
|
||||
#include <include/wrapper/cef_message_router.h>
|
||||
|
||||
#include <yaml-cpp/yaml.h>
|
||||
|
||||
@@ -43,10 +44,18 @@ namespace loot {
|
||||
|
||||
// Override CefBrowserProcessHandler methods.
|
||||
virtual void OnContextInitialized() OVERRIDE;
|
||||
virtual void OnWebKitInitialized() OVERRIDE;
|
||||
|
||||
// Override CefRenderProcessHandler methods.
|
||||
virtual bool OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
|
||||
CefProcessId source_process,
|
||||
CefRefPtr<CefProcessMessage> message) OVERRIDE;
|
||||
private:
|
||||
CefRefPtr<CefMessageRouterRendererSide> message_router_;
|
||||
|
||||
virtual void OnContextCreated(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
CefRefPtr<CefV8Context> context) OVERRIDE;
|
||||
CefRefPtr<CefFrame> frame,
|
||||
CefRefPtr<CefV8Context> context) OVERRIDE;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(LootApp);
|
||||
};
|
||||
|
||||
@@ -39,6 +39,34 @@ namespace loot {
|
||||
LootHandler * g_instance = NULL;
|
||||
}
|
||||
|
||||
// Handler methods
|
||||
//----------------
|
||||
|
||||
Handler::Handler() {}
|
||||
|
||||
// Called due to cefQuery execution in binding.html.
|
||||
bool Handler::OnQuery(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
int64 query_id,
|
||||
const CefString& request,
|
||||
bool persistent,
|
||||
CefRefPtr<Callback> callback) {
|
||||
|
||||
const std::string& message_name = request;
|
||||
if (message_name.find("openReadme") == 0) {
|
||||
// Open readme in default application.
|
||||
std::string url = ToFileURL(g_path_readme);
|
||||
int len = MultiByteToWideChar(CP_UTF8, 0, url.c_str(), url.length() + 1, 0, 0);
|
||||
std::wstring wurl(len, NULL);
|
||||
MultiByteToWideChar(CP_UTF8, 0, url.c_str(), url.length() + 1, &(wurl[0]), len);
|
||||
ShellExecute(0, NULL, wurl.c_str(), NULL, NULL, SW_SHOWNORMAL);
|
||||
callback->Success(request);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
LootHandler::LootHandler() : is_closing_(false) {
|
||||
assert(!g_instance);
|
||||
g_instance = this;
|
||||
@@ -67,6 +95,12 @@ namespace loot {
|
||||
return this;
|
||||
}
|
||||
|
||||
bool LootHandler::OnProcessMessageReceived( CefRefPtr<CefBrowser> browser,
|
||||
CefProcessId source_process,
|
||||
CefRefPtr<CefProcessMessage> message) {
|
||||
return browser_side_router_->OnProcessMessageReceived(browser, source_process, message);
|
||||
}
|
||||
|
||||
// CefDisplayHandler methods
|
||||
//--------------------------
|
||||
|
||||
@@ -95,6 +129,12 @@ namespace loot {
|
||||
|
||||
// Add to the list of existing browsers.
|
||||
browser_list_.push_back(browser);
|
||||
|
||||
// Create a message router.
|
||||
CefMessageRouterConfig config;
|
||||
browser_side_router_ = CefMessageRouterBrowserSide::Create(config);
|
||||
|
||||
browser_side_router_->AddHandler(new Handler(), false);
|
||||
}
|
||||
|
||||
bool LootHandler::DoClose(CefRefPtr<CefBrowser> browser) {
|
||||
@@ -116,6 +156,9 @@ namespace loot {
|
||||
void LootHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
|
||||
assert(CefCurrentlyOn(TID_UI));
|
||||
|
||||
// Cancel any javascript callbacks.
|
||||
browser_side_router_->OnBeforeClose(browser);
|
||||
|
||||
// Remove from the list of existing browsers.
|
||||
for (BrowserList::iterator bit = browser_list_.begin(); bit != browser_list_.end(); ++bit) {
|
||||
if ((*bit)->IsSame(browser)) {
|
||||
|
||||
@@ -25,12 +25,29 @@
|
||||
#ifndef __LOOT_GUI_HANDLER__
|
||||
#define __LOOT_GUI_HANDLER__
|
||||
|
||||
#include "../backend/globals.h"
|
||||
#include "../backend/helpers.h"
|
||||
|
||||
#include <include/cef_client.h>
|
||||
#include <include/wrapper/cef_message_router.h>
|
||||
|
||||
#include <list>
|
||||
|
||||
namespace loot {
|
||||
|
||||
class Handler : public CefMessageRouterBrowserSide::Handler {
|
||||
public:
|
||||
Handler();
|
||||
|
||||
// Called due to cefQuery execution in binding.html.
|
||||
virtual bool OnQuery(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
int64 query_id,
|
||||
const CefString& request,
|
||||
bool persistent,
|
||||
CefRefPtr<Callback> callback) OVERRIDE;
|
||||
};
|
||||
|
||||
class LootHandler : public CefClient,
|
||||
public CefDisplayHandler,
|
||||
public CefLifeSpanHandler,
|
||||
@@ -48,6 +65,10 @@ namespace loot {
|
||||
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE;
|
||||
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE;
|
||||
|
||||
virtual bool OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
|
||||
CefProcessId source_process,
|
||||
CefRefPtr<CefProcessMessage> message) OVERRIDE;
|
||||
|
||||
// CefDisplayHandler methods
|
||||
//--------------------------
|
||||
virtual void OnTitleChange(CefRefPtr<CefBrowser> browser,
|
||||
@@ -76,6 +97,7 @@ namespace loot {
|
||||
// List of existing browser windows. Only accessed on the CEF UI thread.
|
||||
typedef std::list<CefRefPtr<CefBrowser> > BrowserList;
|
||||
BrowserList browser_list_;
|
||||
CefRefPtr<CefMessageRouterBrowserSide> browser_side_router_;
|
||||
|
||||
bool is_closing_;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user