protocol: api to register custom schemes to standard schemes
This commit is contained in:
parent
ad59393641
commit
663a48ee38
8 changed files with 47 additions and 0 deletions
|
@ -75,6 +75,16 @@ std::string AtomContentClient::GetProduct() const {
|
||||||
void AtomContentClient::AddAdditionalSchemes(
|
void AtomContentClient::AddAdditionalSchemes(
|
||||||
std::vector<std::string>* standard_schemes,
|
std::vector<std::string>* standard_schemes,
|
||||||
std::vector<std::string>* savable_schemes) {
|
std::vector<std::string>* savable_schemes) {
|
||||||
|
auto command_line = base::CommandLine::ForCurrentProcess();
|
||||||
|
auto custom_schemes = command_line->GetSwitchValueASCII(
|
||||||
|
switches::kRegisterStandardSchemes);
|
||||||
|
if (!custom_schemes.empty()) {
|
||||||
|
std::vector<std::string> schemes;
|
||||||
|
base::SplitString(custom_schemes, ',', &schemes);
|
||||||
|
standard_schemes->insert(standard_schemes->end(),
|
||||||
|
schemes.begin(),
|
||||||
|
schemes.end());
|
||||||
|
}
|
||||||
standard_schemes->push_back("chrome-extension");
|
standard_schemes->push_back("chrome-extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "atom/browser/api/atom_api_protocol.h"
|
#include "atom/browser/api/atom_api_protocol.h"
|
||||||
|
|
||||||
|
#include "atom/browser/atom_browser_client.h"
|
||||||
#include "atom/browser/atom_browser_context.h"
|
#include "atom/browser/atom_browser_context.h"
|
||||||
#include "atom/browser/net/adapter_request_job.h"
|
#include "atom/browser/net/adapter_request_job.h"
|
||||||
#include "atom/browser/net/atom_url_request_job_factory.h"
|
#include "atom/browser/net/atom_url_request_job_factory.h"
|
||||||
|
@ -205,6 +206,7 @@ mate::ObjectTemplateBuilder Protocol::GetObjectTemplateBuilder(
|
||||||
return mate::ObjectTemplateBuilder(isolate)
|
return mate::ObjectTemplateBuilder(isolate)
|
||||||
.SetMethod("registerProtocol", &Protocol::RegisterProtocol)
|
.SetMethod("registerProtocol", &Protocol::RegisterProtocol)
|
||||||
.SetMethod("unregisterProtocol", &Protocol::UnregisterProtocol)
|
.SetMethod("unregisterProtocol", &Protocol::UnregisterProtocol)
|
||||||
|
.SetMethod("registerStandardSchemes", &Protocol::RegisterStandardSchemes)
|
||||||
.SetMethod("isHandledProtocol", &Protocol::IsHandledProtocol)
|
.SetMethod("isHandledProtocol", &Protocol::IsHandledProtocol)
|
||||||
.SetMethod("interceptProtocol", &Protocol::InterceptProtocol)
|
.SetMethod("interceptProtocol", &Protocol::InterceptProtocol)
|
||||||
.SetMethod("uninterceptProtocol", &Protocol::UninterceptProtocol);
|
.SetMethod("uninterceptProtocol", &Protocol::UninterceptProtocol);
|
||||||
|
@ -237,6 +239,11 @@ void Protocol::UnregisterProtocol(v8::Isolate* isolate,
|
||||||
base::Unretained(this), scheme));
|
base::Unretained(this), scheme));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Protocol::RegisterStandardSchemes(
|
||||||
|
const std::vector<std::string>& schemes) {
|
||||||
|
atom::AtomBrowserClient::SetCustomSchemes(schemes);
|
||||||
|
}
|
||||||
|
|
||||||
bool Protocol::IsHandledProtocol(const std::string& scheme) {
|
bool Protocol::IsHandledProtocol(const std::string& scheme) {
|
||||||
return job_factory_->IsHandledProtocol(scheme);
|
return job_factory_->IsHandledProtocol(scheme);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "atom/browser/api/event_emitter.h"
|
#include "atom/browser/api/event_emitter.h"
|
||||||
#include "base/callback.h"
|
#include "base/callback.h"
|
||||||
|
@ -41,6 +42,9 @@ class Protocol : public mate::EventEmitter {
|
||||||
private:
|
private:
|
||||||
typedef std::map<std::string, JsProtocolHandler> ProtocolHandlersMap;
|
typedef std::map<std::string, JsProtocolHandler> ProtocolHandlersMap;
|
||||||
|
|
||||||
|
// Register schemes to standard scheme list.
|
||||||
|
void RegisterStandardSchemes(const std::vector<std::string>& schemes);
|
||||||
|
|
||||||
// Register/unregister an networking |scheme| which would be handled by
|
// Register/unregister an networking |scheme| which would be handled by
|
||||||
// |callback|.
|
// |callback|.
|
||||||
void RegisterProtocol(v8::Isolate* isolate,
|
void RegisterProtocol(v8::Isolate* isolate,
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "base/files/file_util.h"
|
#include "base/files/file_util.h"
|
||||||
#include "base/strings/string_number_conversions.h"
|
#include "base/strings/string_number_conversions.h"
|
||||||
|
#include "base/strings/string_util.h"
|
||||||
#include "chrome/browser/printing/printing_message_filter.h"
|
#include "chrome/browser/printing/printing_message_filter.h"
|
||||||
#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h"
|
#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h"
|
||||||
#include "chrome/browser/speech/tts_message_filter.h"
|
#include "chrome/browser/speech/tts_message_filter.h"
|
||||||
|
@ -43,6 +44,9 @@ int kDefaultRoutingID = 2;
|
||||||
// Next navigation should not restart renderer process.
|
// Next navigation should not restart renderer process.
|
||||||
bool g_suppress_renderer_process_restart = false;
|
bool g_suppress_renderer_process_restart = false;
|
||||||
|
|
||||||
|
// Custom schemes to be registered to standard.
|
||||||
|
std::string g_custom_schemes = "";
|
||||||
|
|
||||||
// Find out the owner of the child process according to |process_id|.
|
// Find out the owner of the child process according to |process_id|.
|
||||||
enum ProcessOwner {
|
enum ProcessOwner {
|
||||||
OWNER_NATIVE_WINDOW,
|
OWNER_NATIVE_WINDOW,
|
||||||
|
@ -95,6 +99,11 @@ void AtomBrowserClient::SuppressRendererProcessRestartForOnce() {
|
||||||
g_suppress_renderer_process_restart = true;
|
g_suppress_renderer_process_restart = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AtomBrowserClient::SetCustomSchemes(
|
||||||
|
const std::vector<std::string>& schemes) {
|
||||||
|
g_custom_schemes = JoinString(schemes, ',');
|
||||||
|
}
|
||||||
|
|
||||||
AtomBrowserClient::AtomBrowserClient() {
|
AtomBrowserClient::AtomBrowserClient() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,9 +183,13 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
|
||||||
base::CommandLine* command_line,
|
base::CommandLine* command_line,
|
||||||
int process_id) {
|
int process_id) {
|
||||||
std::string process_type = command_line->GetSwitchValueASCII("type");
|
std::string process_type = command_line->GetSwitchValueASCII("type");
|
||||||
|
|
||||||
if (process_type != "renderer")
|
if (process_type != "renderer")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
command_line->AppendSwitchASCII(switches::kRegisterStandardSchemes,
|
||||||
|
g_custom_schemes);
|
||||||
|
|
||||||
NativeWindow* window;
|
NativeWindow* window;
|
||||||
WebViewManager::WebViewInfo info;
|
WebViewManager::WebViewInfo info;
|
||||||
ProcessOwner owner = GetProcessOwner(process_id, &window, &info);
|
ProcessOwner owner = GetProcessOwner(process_id, &window, &info);
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#define ATOM_BROWSER_ATOM_BROWSER_CLIENT_H_
|
#define ATOM_BROWSER_ATOM_BROWSER_CLIENT_H_
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "brightray/browser/browser_client.h"
|
#include "brightray/browser/browser_client.h"
|
||||||
|
|
||||||
|
@ -27,6 +28,8 @@ class AtomBrowserClient : public brightray::BrowserClient {
|
||||||
|
|
||||||
// Don't force renderer process to restart for once.
|
// Don't force renderer process to restart for once.
|
||||||
static void SuppressRendererProcessRestartForOnce();
|
static void SuppressRendererProcessRestartForOnce();
|
||||||
|
// Custom schemes to be registered to standard.
|
||||||
|
static void SetCustomSchemes(const std::vector<std::string>& schemes);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// content::ContentBrowserClient:
|
// content::ContentBrowserClient:
|
||||||
|
|
|
@ -104,6 +104,9 @@ const char kPageVisibility[] = "page-visibility";
|
||||||
// Disable HTTP cache.
|
// Disable HTTP cache.
|
||||||
const char kDisableHttpCache[] = "disable-http-cache";
|
const char kDisableHttpCache[] = "disable-http-cache";
|
||||||
|
|
||||||
|
// Register schemes to standard.
|
||||||
|
const char kRegisterStandardSchemes[] = "register-standard-schemes";
|
||||||
|
|
||||||
} // namespace switches
|
} // namespace switches
|
||||||
|
|
||||||
} // namespace atom
|
} // namespace atom
|
||||||
|
|
|
@ -56,6 +56,7 @@ extern const char kSharedWorker[];
|
||||||
extern const char kPageVisibility[];
|
extern const char kPageVisibility[];
|
||||||
|
|
||||||
extern const char kDisableHttpCache[];
|
extern const char kDisableHttpCache[];
|
||||||
|
extern const char kRegisterStandardSchemes[];
|
||||||
|
|
||||||
} // namespace switches
|
} // namespace switches
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,12 @@ response you would like to send.
|
||||||
|
|
||||||
Unregisters the custom protocol of `scheme`.
|
Unregisters the custom protocol of `scheme`.
|
||||||
|
|
||||||
|
## protocol.registerStandardSchemes(value)
|
||||||
|
|
||||||
|
* `value` Array
|
||||||
|
|
||||||
|
`value` is an array of custom schemes to be registered to the standard.
|
||||||
|
|
||||||
## protocol.isHandledProtocol(scheme)
|
## protocol.isHandledProtocol(scheme)
|
||||||
|
|
||||||
* `scheme` String
|
* `scheme` String
|
||||||
|
|
Loading…
Reference in a new issue