[PageLifecycle] Enable Freezing tabs from the TabManager

This CL allows the TabManager to freeze a specific tab, it also extends
the chrome://discards UI to freeze a selected tab.

What this CL does:
- It calls the WebViewScheduler::SetPageFrozen.
- It reaches all the WebViewSchedulers in the page including the ones
  out-of-process.
- That in turns fires the window.onfreeze callback with its current and
  future restrictions
- It enables the TabManager to freeze a tab instead of discarding it if
  it sees fit
- It allows developers to test the onfreeze callback from the
  chrome://discards page

What this CL does not do:
- It does not actually freeze the page, as this logic needs to be
  migrated from the RendererSchedulerImpl down to the FrameSchedulerImpl
- It does not propagate the lifecycle state back to the TabManager

Both of them are coming up in follow up CLs

Bug: chromium:804976
Cq-Include-Trybots: master.tryserver.chromium.linux:closure_compilation
Change-Id: Ide3963dbe65b3adc1a5aa99dd0bdaca8f7bae9df
Reviewed-on: https://chromium-review.googlesource.com/924274
Reviewed-by: Nasko Oskov <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Reviewed-by: Alexander Timin <[email protected]>
Reviewed-by: Kentaro Hara <[email protected]>
Reviewed-by: Chris Hamilton <[email protected]>
Commit-Queue: Fadi Meawad <[email protected]>
Cr-Commit-Position: refs/heads/master@{#542300}
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index 9c6643a..b74438d7 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -480,6 +480,9 @@
   // Stop any pending navigation.
   virtual void Stop() = 0;
 
+  // Freeze the current page.
+  virtual void FreezePage() = 0;
+
   // Creates a new WebContents with the same state as this one. The returned
   // heap-allocated pointer is owned by the caller.
   virtual WebContents* Clone() = 0;