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); |