Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NSEG 19/08 chromium内部構造とIPC

NSEG 19/08 chromium内部構造とIPC

hATrayflood

August 10, 2019
Tweet

More Decks by hATrayflood

Other Decks in Programming

Transcript

  1. 2019/8/10 NSEG 19/08 url/BUILD.gn component("url") { sources = [ ..

    ] deps = [ "//base", "//base/third_party/dynamic_annotations", "//ipc:param_traits", ] by ABE Hiroki aka hATrayflood
  2. 2019/8/10 NSEG 19/08 third_party/blink/renderer/core/BUILD.gn component("core") { output_name = "blink_core" deps

    = [ "//third_party/blink/public/common", "//third_party/blink/renderer/platform", "//third_party/blink/renderer/platform/wtf", "//content/public/common", # 不正な依存関係 ] by ABE Hiroki aka hATrayflood
  3. 2019/8/10 NSEG 19/08 送信 content/renderer/render_frame_impl.cc void RenderFrameImpl::OpenURL(std::unique_ptr<blink::WebNavigationInfo> info) { //

    A valid RequestorOrigin is always expected to be present. DCHECK(!info->url_request.RequestorOrigin().IsNull()); WebNavigationPolicy policy = info->navigation_policy; FrameHostMsg_OpenURL_Params params; params.url = info->url_request.Url(); params.initiator_origin = info->url_request.RequestorOrigin(); params.uses_post = IsHttpPost(info->url_request); ... Send(new FrameHostMsg_OpenURL(routing_id_, params)); } by ABE Hiroki aka hATrayflood
  4. 2019/8/10 NSEG 19/08 受信 content/browser/frame_host/render_frame_host_impl.cc bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {

    ... IPC_BEGIN_MESSAGE_MAP(RenderFrameHostImpl, msg) IPC_MESSAGE_HANDLER(FrameHostMsg_Detach, OnDetach) IPC_MESSAGE_HANDLER(FrameHostMsg_UpdateState, OnUpdateState) IPC_MESSAGE_HANDLER(FrameHostMsg_OpenURL, OnOpenURL) IPC_MESSAGE_HANDLER(FrameHostMsg_BeforeUnload_ACK, OnBeforeUnloadACK) IPC_MESSAGE_HANDLER(FrameHostMsg_SwapOut_ACK, OnSwapOutACK) IPC_MESSAGE_HANDLER(FrameHostMsg_ContextMenu, OnContextMenu) ... by ABE Hiroki aka hATrayflood
  5. 2019/8/10 NSEG 19/08 content/browser/frame_host/render_frame_host_impl.cc void RenderFrameHostImpl::OnOpenURL(const FrameHostMsg_OpenURL_Params& params) { //

    Verify and unpack IPC payload. GURL validated_url; scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory; if (!VerifyOpenURLParams(GetSiteInstance(), params, &validated_url, &blob_url_loader_factory)) { return; } ... frame_tree_node_->navigator()->RequestOpenURL( this, validated_url, params.initiator_origin, params.uses_post, params.resource_request_body, params.extra_headers, params.referrer, params.disposition, params.should_replace_current_entry, params.user_gesture, params.triggering_event_info, params.href_translate, std::move(blob_url_loader_factory)); } by ABE Hiroki aka hATrayflood
  6. 2019/8/10 NSEG 19/08 定義 third_party/blink/public/mojom/mime/mime_registry.mojom module blink.mojom; interface MimeRegistry {

    [Sync] GetMimeTypeFromExtension(string extension) => (string mime_type); }; by ABE Hiroki aka hATrayflood
  7. 2019/8/10 NSEG 19/08 送信 third_party/blink/renderer/platform/network/mime/mime_type_registry.cc String MIMETypeRegistry::GetMIMETypeForExtension(const String& ext) {

    // The sandbox restricts our access to the registry, so we need to proxy // these calls over to the browser process. DEFINE_STATIC_LOCAL(MimeRegistryPtrHolder, registry_holder, ()); String mime_type; if (!registry_holder.mime_registry->GetMimeTypeFromExtension( ext.IsNull() ? "" : ext, &mime_type)) { return String(); } return mime_type; } by ABE Hiroki aka hATrayflood
  8. 2019/8/10 NSEG 19/08 受信 content/browser/renderer_host/render_process_host_impl.cc void RenderProcessHostImpl::RegisterMojoInterfaces() { auto registry

    = std::make_unique<service_manager::BinderRegistry>(); ... registry->AddInterface(base::BindRepeating(&MimeRegistryImpl::Create), base::CreateSequencedTaskRunner( {base::ThreadPool(), base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, base::TaskPriority::USER_BLOCKING})); by ABE Hiroki aka hATrayflood
  9. 2019/8/10 NSEG 19/08 処理実⾏ content/browser/mime_registry_impl.cc void MimeRegistryImpl::GetMimeTypeFromExtension( const std::string& extension,

    GetMimeTypeFromExtensionCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); std::string mime_type; net::GetMimeTypeFromExtension( base::FilePath::FromUTF8Unsafe(extension).value(), &mime_type); std::move(callback).Run(mime_type); } by ABE Hiroki aka hATrayflood
  10. 2019/8/10 NSEG 19/08 nhiroki's weblog Chromium のソースコードの歩き⽅ https://nhiroki.jp/2017/12/01/chromium-sourcecode @toyoshim Web

    MIDIを例にChromeにAPIを追加する⼿順概要を追ってみる https://qiita.com/toyoshim/items/1b02e6ec5728da1aef3f Chromium Browser Advent Calendar 2017 https://qiita.com/advent-calendar/2017/chromium by ABE Hiroki aka hATrayflood
  11. 2019/8/10 NSEG 19/08 ・リンク集 twitter @hATrayflood http://twitter.com/hATrayflood C++ use in

    Chromium https://chromium-cpp.appspot.com/ Code Search https://cs.chromium.org/ out/ - Code Search https://cs.chromium.org/chromium/src/out/ GN Reference https://gn.googlesource.com/gn/+/master/docs/reference.md Inter-process Communication (IPC) - The Chromium Projects https://www.chromium.org/developers/design-documents/inter-process-communication by ABE Hiroki aka hATrayflood
  12. 2019/8/10 NSEG 19/08 won't fix: Firefox 3.6のクラッシュ傾向 https://wontfix.blogspot.com/2010/02/firefox-36.html 「Microsoft以外のウイルス対策ソフトは害悪なので⼊れるべきではない」とMozillaの元開発者が告⽩ -

    GIGAZINE https://gigazine.net/news/20170131-stop-using-antivirus/ 容量の壁 - Wikipedia x86_32ビットから64ビット https://ja.wikipedia.org/wiki/容量の壁#x86_32ビットから64ビット Meltdown https://ja.wikipedia.org/wiki/Meltdown Spectre https://ja.wikipedia.org/wiki/Spectre Mojo https://chromium.googlesource.com/chromium/src/+/master/mojo/README.md by ABE Hiroki aka hATrayflood