| Index: chrome/browser/android/vr_shell/vr_shell.cc
 | 
| diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc
 | 
| index 2704107f39f8ccb77ce9870fe9049ad93e3da1ef..bb2c5a7bcc5b6cbdac995612b48c457aefc6b4f8 100644
 | 
| --- a/chrome/browser/android/vr_shell/vr_shell.cc
 | 
| +++ b/chrome/browser/android/vr_shell/vr_shell.cc
 | 
| @@ -6,6 +6,9 @@
 | 
|  
 | 
|  #include <android/native_window_jni.h>
 | 
|  
 | 
| +#include <string>
 | 
| +#include <utility>
 | 
| +
 | 
|  #include "base/metrics/histogram_macros.h"
 | 
|  #include "base/threading/platform_thread.h"
 | 
|  #include "base/threading/thread.h"
 | 
| @@ -234,7 +237,10 @@ void VrShell::SetSurface(JNIEnv* env,
 | 
|  }
 | 
|  
 | 
|  void VrShell::SetIsInVR(bool is_in_vr) {
 | 
| -  main_contents_->GetRenderWidgetHostView()->SetIsInVR(is_in_vr);
 | 
| +  if (main_contents_->GetRenderWidgetHostView() != nullptr)
 | 
| +    main_contents_->GetRenderWidgetHostView()->SetIsInVR(is_in_vr);
 | 
| +  if (ui_contents_->GetRenderWidgetHostView() != nullptr)
 | 
| +    ui_contents_->GetRenderWidgetHostView()->SetIsInVR(is_in_vr);
 | 
|  }
 | 
|  
 | 
|  base::WeakPtr<VrShell> VrShell::GetWeakPtr(
 | 
| @@ -329,19 +335,7 @@ void VrShell::GvrDelegateReady() {
 | 
|  
 | 
|  void VrShell::AppButtonPressed() {
 | 
|  #if defined(ENABLE_VR_SHELL)
 | 
| -  html_interface_->SetMenuMode(!html_interface_->GetMenuMode());
 | 
| -
 | 
| -  // TODO(mthiesse): The page is no longer visible when in menu mode. We
 | 
| -  // should unfocus or otherwise let it know it's hidden.
 | 
| -  if (html_interface_->GetMode() == UiInterface::Mode::WEB_VR) {
 | 
| -    if (delegate_->device_provider()) {
 | 
| -      if (html_interface_->GetMenuMode()) {
 | 
| -        delegate_->device_provider()->OnDisplayBlur();
 | 
| -      } else {
 | 
| -        delegate_->device_provider()->OnDisplayFocus();
 | 
| -      }
 | 
| -    }
 | 
| -  }
 | 
| +  html_interface_->HandleAppButtonClicked();
 | 
|  #endif
 | 
|  }
 | 
|  
 | 
| @@ -376,7 +370,8 @@ void VrShell::UpdateScene(const base::ListValue* args) {
 | 
|                                       base::Passed(args->CreateDeepCopy())));
 | 
|  }
 | 
|  
 | 
| -void VrShell::DoUiAction(const UiAction action) {
 | 
| +void VrShell::DoUiAction(const UiAction action,
 | 
| +                         const base::DictionaryValue* arguments) {
 | 
|    content::NavigationController& controller = main_contents_->GetController();
 | 
|    switch (action) {
 | 
|      case HISTORY_BACK:
 | 
| @@ -393,6 +388,34 @@ void VrShell::DoUiAction(const UiAction action) {
 | 
|      case RELOAD:
 | 
|        controller.Reload(content::ReloadType::NORMAL, false);
 | 
|        break;
 | 
| +    case LOAD_URL: {
 | 
| +      std::string url_string;
 | 
| +      CHECK(arguments->GetString("url", &url_string));
 | 
| +      GURL url(url_string);
 | 
| +      // TODO(crbug.com/683344): Sanitize the URL and prefix, and pass the
 | 
| +      // proper transition type down from the UI.
 | 
| +      controller.LoadURL(url, content::Referrer(),
 | 
| +                         ui::PageTransition::PAGE_TRANSITION_AUTO_TOPLEVEL,
 | 
| +                         std::string(""));
 | 
| +      break;
 | 
| +    }
 | 
| +    case OMNIBOX_CONTENT:
 | 
| +      html_interface_->HandleOmniboxInput(*arguments);
 | 
| +      break;
 | 
| +    case KEY_EVENT: {
 | 
| +      int char_value;
 | 
| +      int modifiers;
 | 
| +      CHECK(arguments->GetInteger("modifiers", &modifiers));
 | 
| +      CHECK(arguments->GetInteger("charValue", &char_value));
 | 
| +      ui_input_manager_->ProcessKeyboardEvent(char_value, modifiers);
 | 
| +      break;
 | 
| +    }
 | 
| +    case SET_CONTENT_PAUSED: {
 | 
| +      bool paused;
 | 
| +      CHECK(arguments->GetBoolean("paused", &paused));
 | 
| +      SetContentPaused(paused);
 | 
| +      break;
 | 
| +    }
 | 
|  #if defined(ENABLE_VR_SHELL_UI_DEV)
 | 
|      case RELOAD_UI:
 | 
|        ui_contents_->GetController().Reload(content::ReloadType::NORMAL, false);
 | 
| @@ -412,6 +435,7 @@ void VrShell::DoUiAction(const UiAction action) {
 | 
|  void VrShell::RenderViewHostChanged(content::RenderViewHost* old_host,
 | 
|                                      content::RenderViewHost* new_host) {
 | 
|    new_host->GetWidget()->GetView()->SetBackgroundColor(SK_ColorTRANSPARENT);
 | 
| +  SetIsInVR(true);
 | 
|  }
 | 
|  
 | 
|  void VrShell::MainFrameWasResized(bool width_changed) {
 | 
| @@ -468,6 +492,19 @@ void VrShell::SetUiCssSize(float width, float height, float dpr) {
 | 
|    Java_VrShellImpl_setUiCssSize(env, j_vr_shell_.obj(), width, height, dpr);
 | 
|  }
 | 
|  
 | 
| +void VrShell::SetContentPaused(bool paused) {
 | 
| +  // TODO(mthiesse): The page is no longer visible when in menu mode. We
 | 
| +  // should unfocus or otherwise let it know it's hidden.
 | 
| +  if (delegate_->device_provider()) {
 | 
| +    if (paused) {
 | 
| +      delegate_->device_provider()->OnDisplayBlur();
 | 
| +    } else {
 | 
| +      delegate_->device_provider()->OnDisplayFocus();
 | 
| +    }
 | 
| +  }
 | 
| +  content_paused_ = paused;
 | 
| +}
 | 
| +
 | 
|  // ----------------------------------------------------------------------------
 | 
|  // Native JNI methods
 | 
|  // ----------------------------------------------------------------------------
 | 
| 
 |