mirror of
https://github.com/atom/atom.git
synced 2026-01-24 06:18:03 -05:00
The root view will now be serialized and saved to local storage when the window is closed or the application is terminated.
92 lines
3.1 KiB
Plaintext
92 lines
3.1 KiB
Plaintext
#include "atom_cef_render_process_handler.h"
|
|
#import "native/v8_extensions/atom.h"
|
|
#import "native/v8_extensions/native.h"
|
|
#import "native/v8_extensions/onig_reg_exp.h"
|
|
#import "native/v8_extensions/onig_scanner.h"
|
|
#import "native/message_translation.h"
|
|
#include <iostream>
|
|
|
|
void AtomCefRenderProcessHandler::OnWebKitInitialized() {
|
|
new v8_extensions::Atom();
|
|
new v8_extensions::Native();
|
|
new v8_extensions::OnigRegExp();
|
|
new v8_extensions::OnigScanner();
|
|
}
|
|
|
|
void AtomCefRenderProcessHandler::OnContextCreated(CefRefPtr<CefBrowser> browser,
|
|
CefRefPtr<CefFrame> frame,
|
|
CefRefPtr<CefV8Context> context) {
|
|
}
|
|
|
|
bool AtomCefRenderProcessHandler::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
|
|
CefProcessId source_process,
|
|
CefRefPtr<CefProcessMessage> message) {
|
|
std::string name = message->GetName().ToString();
|
|
|
|
if (name == "reload") {
|
|
Reload(browser);
|
|
return true;
|
|
}
|
|
else if (name == "shutdown") {
|
|
Shutdown(browser);
|
|
return true;
|
|
}
|
|
else {
|
|
return CallMessageReceivedHandler(browser->GetMainFrame()->GetV8Context(), message);
|
|
}
|
|
}
|
|
|
|
void AtomCefRenderProcessHandler::Reload(CefRefPtr<CefBrowser> browser) {
|
|
CefRefPtr<CefV8Context> context = browser->GetMainFrame()->GetV8Context();
|
|
CefRefPtr<CefV8Value> global = context->GetGlobal();
|
|
|
|
context->Enter();
|
|
CefV8ValueList arguments;
|
|
|
|
CefRefPtr<CefV8Value> reloadFunction = global->GetValue("reload");
|
|
reloadFunction->ExecuteFunction(global, arguments);
|
|
if (reloadFunction->HasException()) {
|
|
browser->ReloadIgnoreCache();
|
|
}
|
|
context->Exit();
|
|
}
|
|
|
|
void AtomCefRenderProcessHandler::Shutdown(CefRefPtr<CefBrowser> browser) {
|
|
CefRefPtr<CefV8Context> context = browser->GetMainFrame()->GetV8Context();
|
|
CefRefPtr<CefV8Value> global = context->GetGlobal();
|
|
|
|
context->Enter();
|
|
CefV8ValueList arguments;
|
|
CefRefPtr<CefV8Value> shutdownFunction = global->GetValue("shutdown");
|
|
shutdownFunction->ExecuteFunction(global, arguments);
|
|
context->Exit();
|
|
}
|
|
|
|
bool AtomCefRenderProcessHandler::CallMessageReceivedHandler(CefRefPtr<CefV8Context> context, CefRefPtr<CefProcessMessage> message) {
|
|
context->Enter();
|
|
|
|
CefRefPtr<CefV8Value> atom = context->GetGlobal()->GetValue("atom");
|
|
CefRefPtr<CefV8Value> receiveFn = atom->GetValue("receiveMessageFromBrowserProcess");
|
|
|
|
CefV8ValueList arguments;
|
|
arguments.push_back(CefV8Value::CreateString(message->GetName().ToString()));
|
|
|
|
CefRefPtr<CefListValue> messageArguments = message->GetArgumentList();
|
|
if (messageArguments->GetSize() > 0) {
|
|
CefRefPtr<CefV8Value> data = CefV8Value::CreateArray(messageArguments->GetSize());
|
|
TranslateList(messageArguments, data);
|
|
arguments.push_back(data);
|
|
}
|
|
|
|
receiveFn->ExecuteFunction(atom, arguments);
|
|
context->Exit();
|
|
|
|
if (receiveFn->HasException()) {
|
|
std::cout << "ERROR: Exception in JS receiving message " << message->GetName().ToString() << "\n";
|
|
return false;
|
|
}
|
|
else {
|
|
return true;
|
|
}
|
|
}
|