OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/webui/vr_shell/vr_shell_ui_message_handler.h" | 5 #include "chrome/browser/ui/webui/vr_shell/vr_shell_ui_message_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
11 #include "base/callback.h" | 11 #include "base/callback.h" |
12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "chrome/browser/android/vr_shell/ui_interface.h" |
13 #include "chrome/browser/android/vr_shell/ui_scene.h" | 14 #include "chrome/browser/android/vr_shell/ui_scene.h" |
14 #include "chrome/browser/android/vr_shell/vr_shell.h" | 15 #include "chrome/browser/android/vr_shell/vr_shell.h" |
15 #include "content/public/browser/web_ui.h" | 16 #include "content/public/browser/web_ui.h" |
16 | 17 |
17 VrShellUIMessageHandler::VrShellUIMessageHandler() = default; | 18 VrShellUIMessageHandler::VrShellUIMessageHandler() = default; |
18 | 19 |
19 VrShellUIMessageHandler::~VrShellUIMessageHandler() = default; | 20 VrShellUIMessageHandler::~VrShellUIMessageHandler() { |
| 21 if (vr_shell_) { |
| 22 vr_shell_->GetUiInterface()->SetUiMessageHandler(nullptr); |
| 23 } |
| 24 } |
20 | 25 |
21 void VrShellUIMessageHandler::RegisterMessages() { | 26 void VrShellUIMessageHandler::RegisterMessages() { |
22 vr_shell_ = vr_shell::VrShell::GetWeakPtr(web_ui()->GetWebContents()); | 27 vr_shell_ = vr_shell::VrShell::GetWeakPtr(web_ui()->GetWebContents()); |
23 | 28 |
24 web_ui()->RegisterMessageCallback( | 29 web_ui()->RegisterMessageCallback( |
25 "domLoaded", base::Bind(&VrShellUIMessageHandler::HandleDomLoaded, | 30 "domLoaded", base::Bind(&VrShellUIMessageHandler::HandleDomLoaded, |
26 base::Unretained(this))); | 31 base::Unretained(this))); |
27 web_ui()->RegisterMessageCallback( | 32 web_ui()->RegisterMessageCallback( |
28 "updateScene", base::Bind(&VrShellUIMessageHandler::HandleUpdateScene, | 33 "updateScene", base::Bind(&VrShellUIMessageHandler::HandleUpdateScene, |
29 base::Unretained(this))); | 34 base::Unretained(this))); |
30 web_ui()->RegisterMessageCallback( | 35 web_ui()->RegisterMessageCallback( |
31 "doAction", base::Bind(&VrShellUIMessageHandler::HandleDoAction, | 36 "doAction", base::Bind(&VrShellUIMessageHandler::HandleDoAction, |
32 base::Unretained(this))); | 37 base::Unretained(this))); |
33 } | 38 } |
34 | 39 |
35 void VrShellUIMessageHandler::HandleDomLoaded(const base::ListValue* args) { | 40 void VrShellUIMessageHandler::HandleDomLoaded(const base::ListValue* args) { |
36 if (!vr_shell_) | 41 AllowJavascript(); |
37 return; | 42 } |
38 | 43 |
| 44 void VrShellUIMessageHandler::OnJavascriptAllowed() { |
| 45 CHECK(vr_shell_); |
| 46 vr_shell_->GetUiInterface()->SetUiMessageHandler(this); |
39 vr_shell_->OnDomContentsLoaded(); | 47 vr_shell_->OnDomContentsLoaded(); |
40 } | 48 } |
41 | 49 |
42 void VrShellUIMessageHandler::HandleUpdateScene(const base::ListValue* args) { | 50 void VrShellUIMessageHandler::HandleUpdateScene(const base::ListValue* args) { |
43 if (!vr_shell_) | 51 if (!vr_shell_) |
44 return; | 52 return; |
45 | 53 |
46 // Copy the update instructions and handle them on the render thread. | 54 // Copy the update instructions and handle them on the render thread. |
47 auto cb = base::Bind(&vr_shell::UiScene::HandleCommands, | 55 auto cb = base::Bind(&vr_shell::UiScene::HandleCommands, |
48 base::Unretained(vr_shell_->GetScene()), | 56 base::Unretained(vr_shell_->GetScene()), |
49 base::Owned(args->CreateDeepCopy().release()), | 57 base::Owned(args->CreateDeepCopy().release()), |
50 vr_shell::UiScene::TimeInMicroseconds()); | 58 vr_shell::UiScene::TimeInMicroseconds()); |
51 vr_shell_->QueueTask(cb); | 59 vr_shell_->QueueTask(cb); |
52 } | 60 } |
53 | 61 |
54 void VrShellUIMessageHandler::HandleDoAction(const base::ListValue* args) { | 62 void VrShellUIMessageHandler::HandleDoAction(const base::ListValue* args) { |
55 int action; | 63 int action; |
56 CHECK(args->GetInteger(0, &action)); | 64 CHECK(args->GetInteger(0, &action)); |
57 if (vr_shell_) { | 65 if (vr_shell_) { |
58 vr_shell_->DoUiAction((vr_shell::UiAction) action); | 66 vr_shell_->DoUiAction((vr_shell::UiAction) action); |
59 } | 67 } |
60 } | 68 } |
| 69 |
| 70 void VrShellUIMessageHandler::SendCommandToUi(const base::Value& value) { |
| 71 CallJavascriptFunction("vrShellUi.command", value); |
| 72 } |
OLD | NEW |