Reland "base: Don't keep running tasks after nested run loop quits on iOS"

This reverts commit d0de086966fe7e05b6aa69d3ec69eedad2aa9e64.

Reason for revert: broke ios-simulator bots

Original change's description:
> Revert "base: Don't keep running tasks after nested run loop quits on iOS"
> 
> This reverts commit 3ce69a991fd9ca03030738e324a1833c02462da0.
> 
> Reason for revert:
> Sheriff suspects this broke a handful of menu tests on macOS 10.12:
> 
> https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Mac10.12%20Tests/17564
> 
> e.g.:
> WebViewTest.TestContextMenu
> 
> Original change's description:
> > base: Don't keep running tasks after nested run loop quits on iOS
> > 
> > The CoreFoundation message pump (MessagePumpCFRunLoop) scheduled an extra call
> > to Delegate::DoWork in the following scenario:
> > 
> >   1. Start a run loop and schedule DoWork.
> >   2. In DoWork, start a second run nested run loop which quits immediately.
> >   3. After the nested run loop quits, schedule another DoWork which quits the
> >      original run loop.
> > 
> > After step #3, the message pump would call DoWork again because the nested
> > run loop triggered the execution of the nesting deferred work source.
> > 
> > This patch fixes the issue by checking whether the further work is allowed
> > before calling DoWork. Note that this check can't be done just for the nested
> > deferred work source, because in the flow above that source is what triggers
> > the call to DoWork in step #3, i.e., the run loop hasn't quit yet at that point.
> > 
> > The patch also includes a fix to
> > WebContentsViewMacInteractiveTest.SelectMenuLifetime; the test had the
> > following sequence in it (while a select menu is open):
> > 
> >   1. Quit an outer run loop.
> >   2. Post a task onto an inner run loop to continue the test.
> > 
> > The assumption here was that a select menu causes an inner run loop to
> > be active while the menu is open. This wasn't strictly correct: the
> > inner run loop is a native (CoreFoundation) run loop as opposed to a
> > base::RunLoop, which can't be explicitly exited with RunLoop::Quit().
> > This means that the Quit() in step #1 affects the same run loop as the
> > PostTask in step #2, i.e., the task is prevented from running.
> > 
> > This patch changes the test to only quit the test run loop after the
> > posted task (which closes the select menu) has run.
> > 
> > Bug: 891670
> > Change-Id: I6fe21289205664c4e1b1469547495667c753f56d
> > Reviewed-on: https://chromium-review.googlesource.com/c/1373754
> > Reviewed-by: Mark Mentovai <mark@chromium.org>
> > Commit-Queue: Sami Kyöstilä <skyostil@chromium.org>
> > Cr-Commit-Position: refs/heads/master@{#615967}
> 
> TBR=skyostil@chromium.org,mark@chromium.org
> 
> Change-Id: If6e3b032ae40a391df56b62ae78f0bc1ed8d93f6
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: 891670
> Reviewed-on: https://chromium-review.googlesource.com/c/1375382
> Reviewed-by: Elly Fong-Jones <ellyjones@chromium.org>
> Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#616297}

TBR=ellyjones@chromium.org,skyostil@chromium.org,mark@chromium.org

Change-Id: I68d7b4687fd1f2a4906961f55b31038199089ff3
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 891670
Reviewed-on: https://chromium-review.googlesource.com/c/1376249
Reviewed-by: Elly Fong-Jones <ellyjones@chromium.org>
Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#616350}
3 files changed