[GuestView] - Introduce MimeHandlerViewAttachHelper

This CL is for the most part a mechanical change which extracts almost
all the frame-based MimeHandlerView code out of
ExtensionsGuestViewMessageFilter. This change both removes the current
clutter form EGVMF as well as fixesa race introduced when the
frame-based logic was added to EGVMF. The reason for the race was that
EGVMF is destroyed on IO thread but all the access to it (for
frame-based MHV) are from UI.

TBR=avi@chromium.org,lazyboy@chromium.org

Bug: 659750, 896679, 911161, 918861
Change-Id: I6474b870e4d56daa68be03637bb633665d9f9dda
Reviewed-on: https://chromium-review.googlesource.com/c/1401451
Commit-Queue: Ehsan Karamad <ekaramad@chromium.org>
Reviewed-by: James MacLean <wjmaclean@chromium.org>
Reviewed-by: Ehsan Karamad <ekaramad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#621155}
void ChromeContentBrowserClient::AdjustUtilityServiceProcessCommandLine(
    const service_manager::Identity& identity,
    base::CommandLine* command_line) {
#if defined(OS_CHROMEOS)
  bool copy_switches = false;
  if (identity.name() == ash::mojom::kServiceName) {
    copy_switches = true;
    command_line->AppendSwitch(switches::kMessageLoopTypeUi);
  }
  if (ash_service_registry::IsAshRelatedServiceName(identity.name())) {
    copy_switches = true;
    command_line->AppendSwitchASCII(switches::kMashServiceName,
                                    identity.name());
  }
  if (identity.name() == viz::mojom::kVizServiceName)
    content::GpuDataManager::GetInstance()->AppendGpuCommandLine(command_line);
  if (copy_switches) {
    for (const auto& sw : base::CommandLine::ForCurrentProcess()->GetSwitches())
      command_line->AppendSwitchNative(sw.first, sw.second);
  }
#endif

#if defined(OS_MACOSX)
  if (identity.name() == video_capture::mojom::kServiceName ||
      identity.name() == audio::mojom::kServiceName)
    command_line->AppendSwitch(switches::kMessageLoopTypeUi);
#endif
}

void ChromeContentBrowserClient::AdjustUtilityServiceProcessCommandLine(
    const service_manager::Identity& identity,
    base::CommandLine* command_line) {
#if defined(OS_CHROMEOS)
  bool copy_switches = false;
  if (identity.name() == ash::mojom::kServiceName) {
    copy_switches = true;
    command_line->AppendSwitch(switches::kMessageLoopTypeUi);
  }
  if (ash_service_registry::IsAshRelatedServiceName(identity.name())) {
    copy_switches = true;
    command_line->AppendSwitchASCII(switches::kMashServiceName,
                                    identity.name());
  }
  if (identity.name() == viz::mojom::kVizServiceName)
    content::GpuDataManager::GetInstance()->AppendGpuCommandLine(command_line);
  if (copy_switches) {
    for (const auto& sw : base::CommandLine::ForCurrentProcess()->GetSwitches())
      command_line->AppendSwitchNative(sw.first, sw.second);
  }
#endif

#if defined(OS_MACOSX)
  if (identity.name() == video_capture::mojom::kServiceName ||
      identity.name() == audio::mojom::kServiceName)
    command_line->AppendSwitch(switches::kMessageLoopTypeUi);
#endif
}
