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

Side by Side Diff: docs/webui_explainer.md

Issue 2938323003: Fix \t vs \s errors in webui_explainer.md (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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <style> 1 <style>
2 .note::before { 2 .note::before {
3 content: 'Note: '; 3 content: 'Note: ';
4 font-variant: small-caps; 4 font-variant: small-caps;
5 font-style: italic; 5 font-style: italic;
6 } 6 }
7 7
8 .doc h1 { 8 .doc h1 {
9 margin: 0; 9 margin: 0;
10 } 10 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 return nullptr; // Not a known host; no special access. 111 return nullptr; // Not a known host; no special access.
112 ``` 112 ```
113 113
114 and if a factory knows how to handle a host (returns a `WebUIFactoryFunction`), 114 and if a factory knows how to handle a host (returns a `WebUIFactoryFunction`),
115 the navigation machinery [grants the renderer process WebUI 115 the navigation machinery [grants the renderer process WebUI
116 bindings](#bindings) via the child security policy. 116 bindings](#bindings) via the child security policy.
117 117
118 ```c++ 118 ```c++
119 // RenderFrameHostImpl::AllowBindings(): 119 // RenderFrameHostImpl::AllowBindings():
120 if (bindings_flags & BINDINGS_POLICY_WEB_UI) { 120 if (bindings_flags & BINDINGS_POLICY_WEB_UI) {
121 » ChildProcessSecurityPolicyImpl::GetInstance()->GrantWebUIBindings( 121 ChildProcessSecurityPolicyImpl::GetInstance()->GrantWebUIBindings(
122 » » » GetProcess()->GetID()); 122 GetProcess()->GetID());
123 } 123 }
124 ``` 124 ```
125 125
126 The factory creates a [`WebUIController`](#WebUIController) for a tab. 126 The factory creates a [`WebUIController`](#WebUIController) for a tab.
127 Here's an example: 127 Here's an example:
128 128
129 ```c++ 129 ```c++
130 // Controller for chrome://donuts. 130 // Controller for chrome://donuts.
131 class DonutsUI : public content::WebUIController { 131 class DonutsUI : public content::WebUIController {
132 public: 132 public:
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 } 442 }
443 ``` 443 ```
444 444
445 This method is basically just a 445 This method is basically just a
446 [`CallJavascriptFunction()`](#CallJavascriptFunction) wrapper that calls a 446 [`CallJavascriptFunction()`](#CallJavascriptFunction) wrapper that calls a
447 global "cr.webUIResponse" method with a success value of false. 447 global "cr.webUIResponse" method with a success value of false.
448 448
449 ```c++ 449 ```c++
450 // WebUIMessageHandler::RejectJavascriptCallback(): 450 // WebUIMessageHandler::RejectJavascriptCallback():
451 CallJavascriptFunction("cr.webUIResponse", callback_id, base::Value(false), 451 CallJavascriptFunction("cr.webUIResponse", callback_id, base::Value(false),
452 » » » » » » » » » » » response); 452 response);
453 ``` 453 ```
454 454
455 See also: [`ResolveJavascriptCallback`](#ResolveJavascriptCallback) 455 See also: [`ResolveJavascriptCallback`](#ResolveJavascriptCallback)
456 456
457 <a name="ResolveJavascriptCallback"></a> 457 <a name="ResolveJavascriptCallback"></a>
458 ### WebUIMessageHandler::ResolveJavascriptCallback() 458 ### WebUIMessageHandler::ResolveJavascriptCallback()
459 459
460 This method is called in response to 460 This method is called in response to
461 [`cr.sendWithPromise()`](#cr_sendWithPromise) to fulfill an issued Promise, 461 [`cr.sendWithPromise()`](#cr_sendWithPromise) to fulfill an issued Promise,
462 often with a value. This results in runnings any fulfillment (first) callbacks 462 often with a value. This results in runnings any fulfillment (first) callbacks
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 if (enabled_bindings_ & BINDINGS_POLICY_WEB_UI) 496 if (enabled_bindings_ & BINDINGS_POLICY_WEB_UI)
497 WebUIExtension::Install(frame_); 497 WebUIExtension::Install(frame_);
498 ``` 498 ```
499 499
500 If the bindings exist, a global `chrome.send()` function is exposed to the 500 If the bindings exist, a global `chrome.send()` function is exposed to the
501 renderer: 501 renderer:
502 502
503 ```c++ 503 ```c++
504 // WebUIExtension::Install(): 504 // WebUIExtension::Install():
505 v8::Local<v8::Object> chrome = 505 v8::Local<v8::Object> chrome =
506 » » GetOrCreateChromeObject(isolate, context->Global()); 506 GetOrCreateChromeObject(isolate, context->Global());
507 chrome->Set(gin::StringToSymbol(isolate, "send"), 507 chrome->Set(gin::StringToSymbol(isolate, "send"),
508 » » » » » » gin::CreateFunctionTemplate( 508 gin::CreateFunctionTemplate(
509 » » » » » » » » isolate, base::B ind(&WebUIExtension::Send))->GetFunction()); 509 isolate, base::Bind(&WebUIExtension::Send))->GetFunction());
510 ``` 510 ```
511 511
512 The `chrome.send()` method takes a message name and argument list. 512 The `chrome.send()` method takes a message name and argument list.
513 513
514 ```js 514 ```js
515 chrome.send('messageName', [arg1, arg2, ...]); 515 chrome.send('messageName', [arg1, arg2, ...]);
516 ``` 516 ```
517 517
518 The message name and argument list are serialized to JSON and sent via the 518 The message name and argument list are serialized to JSON and sent via the
519 `ViewHostMsg_WebUISend` IPC message from the renderer to the browser. 519 `ViewHostMsg_WebUISend` IPC message from the renderer to the browser.
520 520
521 ```c++ 521 ```c++
522 // In the renderer (WebUIExtension::Send()): 522 // In the renderer (WebUIExtension::Send()):
523 render_view->Send(new ViewHostMsg_WebUISend(render_view->GetRoutingID(), 523 render_view->Send(new ViewHostMsg_WebUISend(render_view->GetRoutingID(),
524 » » » » » » » » » » » » » » » » » » » » » » frame->GetDocument().Url(), 524 frame->GetDocument().Url(),
525 » » » » » » » » » » » » » » » » » » » » » » message, *content)); 525 message, *content));
526 ``` 526 ```
527 ```c++ 527 ```c++
528 // In the browser (WebUIImpl::OnMessageReceived()): 528 // In the browser (WebUIImpl::OnMessageReceived()):
529 IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnWebUISend) 529 IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnWebUISend)
530 ``` 530 ```
531 531
532 The browser-side code does a map lookup for the message name and calls the found 532 The browser-side code does a map lookup for the message name and calls the found
533 callback with the deserialized arguments: 533 callback with the deserialized arguments:
534 534
535 ```c++ 535 ```c++
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 let localLinks = Array.from(document.querySelectorAll('a[href^="#"]')); 667 let localLinks = Array.from(document.querySelectorAll('a[href^="#"]'));
668 let hrefs = localLinks.map(a => a.href.split('#')[1]); 668 let hrefs = localLinks.map(a => a.href.split('#')[1]);
669 669
670 hrefs.forEach(href => { 670 hrefs.forEach(href => {
671 if (names.includes(href)) 671 if (names.includes(href))
672 console.info('found: ' + href); 672 console.info('found: ' + href);
673 else 673 else
674 console.error('broken href: ' + href); 674 console.error('broken href: ' + href);
675 }) 675 })
676 </script> 676 </script>
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698