code: function MainView() {
      assertFirstConstructorCall(MainView);
  
      if (hasTouchScreen()) {
        document.body.classList.add('touch');
      }
  
      // This must be initialized before the tabs, so they can register as
      // observers.
      g_browser = BrowserBridge.getInstance();
  
      // This must be the first constants observer, so other constants observers
      // can safely use the globals, rather than depending on walking through
      // the constants themselves.
      g_browser.addConstantsObserver(new ConstantsObserver());
  
      // Create the tab switcher.
      this.initTabs_();
  
      // Cut out a small vertical strip at the top of the window, to display
      // a high level status (i.e. if we are displaying a log file or not).
      // Below it we will position the main tabs and their content area.
      this.topBarView_ = TopBarView.getInstance(this);
      const verticalSplitView =
          new VerticalSplitView(this.topBarView_, this.tabSwitcher_);
  
      superClass.call(this, verticalSplitView);
  
      // Trigger initial layout.
      this.resetGeometry();
  
      window.onhashchange = this.onUrlHashChange_.bind(this);
  
      // Select the initial view based on the current URL.
      window.onhashchange();
  
      // No log file loaded yet so set the status bar to that state.
      this.topBarView_.switchToSubView('loaded').setFileName(
          'No log to display.');
  
      // TODO(rayraymond): Follow-up is to completely remove all code from
      // g_browser that interacts with sending/receiving messages from
      // browser.
      g_browser.disable();
    }
docs: Main entry point. Called once the page has loaded.
  @constructor