Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(504)

Unified Diff: ios/web/webui/crw_web_ui_manager.mm

Issue 2946383002: Support new-style Mojo JS core API on IOS. (Closed)
Patch Set: . Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/web/test/data/mojo_test.js ('k') | ios/web/webui/crw_web_ui_manager_unittest.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « ios/web/test/data/mojo_test.js ('k') | ios/web/webui/crw_web_ui_manager_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698