| Index: ios/web/webui/crw_web_ui_manager.mm
|
| diff --git a/ios/web/webui/crw_web_ui_manager.mm b/ios/web/webui/crw_web_ui_manager.mm
|
| index ba20a4e459f5f4b6ddefb4a821a17006c78158bb..8898d2a52562ecbc8f56e08046a269b75e308669 100644
|
| --- a/ios/web/webui/crw_web_ui_manager.mm
|
| +++ b/ios/web/webui/crw_web_ui_manager.mm
|
| @@ -23,9 +23,7 @@
|
| #import "ios/web/public/web_state/web_state_observer_bridge.h"
|
| #import "ios/web/web_state/web_state_impl.h"
|
| #import "ios/web/webui/crw_web_ui_page_builder.h"
|
| -#include "ios/web/webui/mojo_js_constants.h"
|
| #import "ios/web/webui/url_fetcher_block_adapter.h"
|
| -#include "mojo/public/js/constants.h"
|
| #import "net/base/mac/url_conversions.h"
|
|
|
| #if !defined(__has_feature) || !__has_feature(objc_arc)
|
| @@ -54,14 +52,6 @@ const char kScriptCommandPrefix[] = "webui";
|
| // Handles JavaScript message from the WebUI page.
|
| - (BOOL)handleWebUIJSMessage:(const base::DictionaryValue&)message;
|
|
|
| -// Handles webui.loadMojo JavaScript message from the WebUI page.
|
| -- (BOOL)handleLoadMojo:(const base::ListValue*)arguments;
|
| -
|
| -// Executes mojo script and signals |webui.loadMojo| finish.
|
| -- (void)executeMojoScript:(const std::string&)mojoScript
|
| - forModuleName:(const std::string&)moduleName
|
| - loadID:(const std::string&)loadID;
|
| -
|
| // Removes favicon callback from web state.
|
| - (void)resetWebState;
|
|
|
| @@ -188,111 +178,10 @@ const char kScriptCommandPrefix[] = "webui";
|
| return NO;
|
| }
|
|
|
| - if (command == "webui.loadMojo")
|
| - return [self handleLoadMojo:arguments];
|
| -
|
| DLOG(WARNING) << "Unknown webui command received: " << command;
|
| return NO;
|
| }
|
|
|
| -- (BOOL)handleLoadMojo:(const base::ListValue*)arguments {
|
| - std::string moduleName;
|
| - if (!arguments->GetString(0, &moduleName)) {
|
| - DLOG(WARNING) << "JS message parameter not found: Module name";
|
| - return NO;
|
| - }
|
| - std::string loadID;
|
| - if (!arguments->GetString(1, &loadID)) {
|
| - DLOG(WARNING) << "JS message parameter not found: Load ID";
|
| - return NO;
|
| - }
|
| -
|
| - // Look for built-in scripts first.
|
| - std::map<std::string, int> resource_map{
|
| - {mojo::kAssociatedBindingsModuleName, IDR_MOJO_ASSOCIATED_BINDINGS_JS},
|
| - {mojo::kBindingsModuleName, IDR_MOJO_BINDINGS_JS},
|
| - {mojo::kBufferModuleName, IDR_MOJO_BUFFER_JS},
|
| - {mojo::kCodecModuleName, IDR_MOJO_CODEC_JS},
|
| - {mojo::kConnectorModuleName, IDR_MOJO_CONNECTOR_JS},
|
| - {mojo::kControlMessageHandlerModuleName,
|
| - IDR_MOJO_CONTROL_MESSAGE_HANDLER_JS},
|
| - {mojo::kControlMessageProxyModuleName, IDR_MOJO_CONTROL_MESSAGE_PROXY_JS},
|
| - {mojo::kInterfaceControlMessagesMojom,
|
| - IDR_MOJO_INTERFACE_CONTROL_MESSAGES_MOJOM_JS},
|
| - {mojo::kInterfaceTypesModuleName, IDR_MOJO_INTERFACE_TYPES_JS},
|
| - {mojo::kRouterModuleName, IDR_MOJO_ROUTER_JS},
|
| - {mojo::kUnicodeModuleName, IDR_MOJO_UNICODE_JS},
|
| - {mojo::kValidatorModuleName, IDR_MOJO_VALIDATOR_JS},
|
| - {web::kConsoleModuleName, IDR_IOS_CONSOLE_JS},
|
| - {web::kTimerModuleName, IDR_IOS_TIMER_JS},
|
| - {web::kCoreModuleName, IDR_IOS_MOJO_CORE_JS},
|
| - {web::kHandleUtilModuleName, IDR_IOS_MOJO_HANDLE_UTIL_JS},
|
| - {web::kInterfaceProviderModuleName, IDR_IOS_SHELL_INTERFACE_PROVIDER_JS},
|
| - {web::kSupportModuleName, IDR_IOS_MOJO_SUPPORT_JS},
|
| - {web::kSyncMessageChannelModuleName,
|
| - IDR_IOS_MOJO_SYNC_MESSAGE_CHANNEL_JS},
|
| - {mojo::kPipeControlMessagesMojom,
|
| - IDR_MOJO_PIPE_CONTROL_MESSAGES_MOJOM_JS},
|
| - {mojo::kInterfaceEndpointClientModuleName,
|
| - IDR_MOJO_INTERFACE_ENDPOINT_CLIENT_JS},
|
| - {mojo::kInterfaceEndpointHandleModuleName,
|
| - IDR_MOJO_INTERFACE_ENDPOINT_HANDLE_JS},
|
| - {mojo::kPipeControlMessageHandlerModuleName,
|
| - IDR_MOJO_PIPE_CONTROL_MESSAGE_HANDLER_JS},
|
| - {mojo::kPipeControlMessageProxyModuleName,
|
| - IDR_MOJO_PIPE_CONTROL_MESSAGE_PROXY_JS},
|
| - };
|
| - scoped_refptr<base::RefCountedMemory> scriptData(
|
| - web::GetWebClient()->GetDataResourceBytes(resource_map[moduleName]));
|
| - if (scriptData) {
|
| - std::string script(reinterpret_cast<const char*>(scriptData->front()),
|
| - scriptData->size());
|
| - [self executeMojoScript:script forModuleName:moduleName loadID:loadID];
|
| - return YES;
|
| - }
|
| -
|
| - // Not a built-in script, try retrieving from network.
|
| - GURL resourceURL(self.webState->GetLastCommittedURL().Resolve(moduleName));
|
| - base::WeakNSObject<CRWWebUIManager> weakSelf(self);
|
| - [self fetchResourceWithURL:resourceURL completionHandler:^(NSData* data) {
|
| - std::string script;
|
| - if (data) {
|
| - script = base::SysNSStringToUTF8(
|
| - [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
|
| - // WebUIIOSDataSourceImpl returns the default resource (which is the HTML
|
| - // page itself) if the resource URL isn't found. Fail with error instead
|
| - // of silently injecting garbage (leading to a not-very-useful syntax
|
| - // error from the JS side).
|
| - if (script.find("<!doctype") != std::string::npos) {
|
| - NOTREACHED() << "cannot load " << moduleName;
|
| - script.clear();
|
| - }
|
| - }
|
| -
|
| - [weakSelf executeMojoScript:script forModuleName:moduleName loadID:loadID];
|
| - }];
|
| -
|
| - return YES;
|
| -}
|
| -
|
| -- (void)executeMojoScript:(const std::string&)mojoScript
|
| - forModuleName:(const std::string&)moduleName
|
| - loadID:(const std::string&)loadID {
|
| - std::string script = mojoScript;
|
| - // Append with completion function call.
|
| - if (script.empty()) {
|
| - DLOG(ERROR) << "Unable to find a module named " << moduleName;
|
| - script = "__crWeb.webUIModuleLoadNotifier.moduleLoadFailed";
|
| - } else {
|
| - script += "__crWeb.webUIModuleLoadNotifier.moduleLoadCompleted";
|
| - }
|
| - base::StringAppendF(&script, "(%s, %s);",
|
| - base::GetQuotedJSONString(moduleName).c_str(),
|
| - base::GetQuotedJSONString(loadID).c_str());
|
| -
|
| - _webState->ExecuteJavaScript(base::UTF8ToUTF16(script));
|
| -}
|
| -
|
| - (void)resetWebState {
|
| if (_webState) {
|
| _webState->RemoveScriptCommandCallback(kScriptCommandPrefix);
|
|
|