Merge ~santoshbit2007/oxide:scrollbar_work into oxide:master

Proposed by Santosh
Status: Needs review
Proposed branch: ~santoshbit2007/oxide:scrollbar_work
Merge into: oxide:master
Diff against target: 368 lines (+195/-3)
10 files modified
shared/BUILD.gn (+4/-0)
shared/browser/oxide_content_browser_client.cc (+6/-1)
shared/browser/scrollbar_type.cc (+37/-0)
shared/browser/scrollbar_type.h (+27/-0)
shared/browser/web_contents_helper.cc (+9/-0)
shared/common/oxide_messages.h (+2/-0)
shared/renderer/oxide_content_renderer_client.cc (+7/-2)
shared/renderer/oxide_content_renderer_client.h (+2/-0)
shared/renderer/oxide_scrollbar_state.cc (+54/-0)
shared/renderer/oxide_scrollbar_state.h (+47/-0)
Reviewer Review Type Date Requested Status
Chris Coulson Needs Fixing
Review via email: mp+311234@code.launchpad.net

Description of the change

Implement scrollbar switch when shell mode is changed.

When shell mode is window mode it shows desktop style scrollbar in mobile
Switching happens dynamically.

To post a comment you must log in.
Revision history for this message
Santosh (santoshbit2007) wrote :

overlay scrollbar is controlled by cmd flags --enable-overlay-scrollbar(disable). Disabling overlay scrollbar using cmd require renderer process restart. so I am not changing command line parameter at runtime instead using the blink Runtime setting to disable overlay scrollbar which is enough to disable the overlayscrollbar from blink.
But outside blink chromium checks for cmd params to find type of scrollbar.
So internal of blink may know overlay scrollbar is disabled but at the same time outside of blink
may see its enabled.

But as of now its all fine, as outside blink there is only one place of checking of "type of scrollbar" which is overridden in oxide_content_render_client::OverrideCompositorSettings.

So now ui::IsOverlayScrollbarEnabled(); will return wrong value when convergence is in picture.

Revision history for this message
Chris Coulson (chrisccoulson) wrote :

Thanks, I've left some comments inline.

Also, this appears to still rely on GetFormFactor() to add --enable-overlay-scrollbar to the commandline, but I really want to get rid of that (bug 1548304).

And I'd prefer not to expose ShellMode to the renderer side - I'd rather we just exposed the desired scrollbar configuration

review: Needs Fixing
Revision history for this message
Santosh (santoshbit2007) :

Unmerged commits

37f64b2... by Santosh

Implement scrollbar switch when shell mode is changed.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/shared/BUILD.gn b/shared/BUILD.gn
index c847f04..3976892 100644
--- a/shared/BUILD.gn
+++ b/shared/BUILD.gn
@@ -456,6 +456,8 @@ component("shared") {
456 "browser/screen.h",456 "browser/screen.h",
457 "browser/screen_observer.cc",457 "browser/screen_observer.cc",
458 "browser/screen_observer.h",458 "browser/screen_observer.h",
459 "browser/scrollbar_type.cc",
460 "browser/scrollbar_type.h",
459 "browser/shell_mode.h",461 "browser/shell_mode.h",
460 "browser/ssl/oxide_certificate_error.cc",462 "browser/ssl/oxide_certificate_error.cc",
461 "browser/ssl/oxide_certificate_error.h",463 "browser/ssl/oxide_certificate_error.h",
@@ -556,6 +558,8 @@ component("shared") {
556 "renderer/oxide_v8_scoped_persistent.h",558 "renderer/oxide_v8_scoped_persistent.h",
557 "renderer/oxide_web_content_settings_client.cc",559 "renderer/oxide_web_content_settings_client.cc",
558 "renderer/oxide_web_content_settings_client.h",560 "renderer/oxide_web_content_settings_client.h",
561 "renderer/oxide_scrollbar_state.cc",
562 "renderer/oxide_scrollbar_state.h"
559 ]563 ]
560564
561 if (is_linux) {565 if (is_linux) {
diff --git a/shared/browser/oxide_content_browser_client.cc b/shared/browser/oxide_content_browser_client.cc
index 876b1ad..7cd6777 100644
--- a/shared/browser/oxide_content_browser_client.cc
+++ b/shared/browser/oxide_content_browser_client.cc
@@ -45,6 +45,7 @@
45#include "shared/browser/ssl/oxide_certificate_error_dispatcher.h"45#include "shared/browser/ssl/oxide_certificate_error_dispatcher.h"
46#include "shared/common/oxide_constants.h"46#include "shared/common/oxide_constants.h"
47#include "shared/common/oxide_content_client.h"47#include "shared/common/oxide_content_client.h"
48#include "shared/common/oxide_messages.h"
4849
49#include "display_form_factor.h"50#include "display_form_factor.h"
50#include "in_process_renderer_observer.h"51#include "in_process_renderer_observer.h"
@@ -60,6 +61,7 @@
60#include "oxide_user_agent_settings.h"61#include "oxide_user_agent_settings.h"
61#include "oxide_web_contents_view.h"62#include "oxide_web_contents_view.h"
62#include "screen.h"63#include "screen.h"
64#include "scrollbar_type.h"
63#include "shell_mode.h"65#include "shell_mode.h"
64#include "web_contents_client.h"66#include "web_contents_client.h"
65#include "web_contents_helper.h"67#include "web_contents_helper.h"
@@ -100,6 +102,7 @@ void ContentBrowserClient::RenderProcessWillLaunch(
100 }102 }
101103
102 host->AddFilter(new RenderMessageFilter(host));104 host->AddFilter(new RenderMessageFilter(host));
105 host->Send(new OxideMsg_ChangeScrollbarType(IsScrollbarTypeOverlay()));
103}106}
104107
105void ContentBrowserClient::SiteInstanceGotProcess(108void ContentBrowserClient::SiteInstanceGotProcess(
@@ -304,11 +307,14 @@ void ContentBrowserClient::OverrideWebkitPrefs(
304 prefs->shrinks_viewport_contents_to_fit = true;307 prefs->shrinks_viewport_contents_to_fit = true;
305 prefs->viewport_enabled = true;308 prefs->viewport_enabled = true;
306 prefs->main_frame_resizes_are_orientation_changes = true;309 prefs->main_frame_resizes_are_orientation_changes = true;
310 prefs->use_solid_color_scrollbars = true;
307 } else {311 } else {
308 prefs->shrinks_viewport_contents_to_fit = false;312 prefs->shrinks_viewport_contents_to_fit = false;
309 prefs->default_minimum_page_scale_factor = 1.0f;313 prefs->default_minimum_page_scale_factor = 1.0f;
310 prefs->viewport_enabled = false;314 prefs->viewport_enabled = false;
311 prefs->main_frame_resizes_are_orientation_changes = false;315 prefs->main_frame_resizes_are_orientation_changes = false;
316 // Aura(desktop) overlay scrollbar never use solid color scrollbars
317 prefs->use_solid_color_scrollbars = false;
312 }318 }
313319
314 prefs->supports_multiple_windows = false;320 prefs->supports_multiple_windows = false;
@@ -317,7 +323,6 @@ void ContentBrowserClient::OverrideWebkitPrefs(
317 contents_helper->client()->CanCreateWindows();323 contents_helper->client()->CanCreateWindows();
318 }324 }
319325
320 prefs->use_solid_color_scrollbars = ui::IsOverlayScrollbarEnabled();
321}326}
322327
323content::DevToolsManagerDelegate*328content::DevToolsManagerDelegate*
diff --git a/shared/browser/scrollbar_type.cc b/shared/browser/scrollbar_type.cc
324new file mode 100644329new file mode 100644
index 0000000..4f7feba
--- /dev/null
+++ b/shared/browser/scrollbar_type.cc
@@ -0,0 +1,37 @@
1// vim:expandtab:shiftwidth=2:tabstop=2:
2// Copyright (C) 2016 Canonical Ltd.
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
18#include "shared/browser/scrollbar_type.h"
19
20#include "ui/native_theme/native_theme_switches.h"
21
22#include "screen.h"
23#include "shell_mode.h"
24
25namespace oxide {
26
27bool IsScrollbarTypeOverlay() {
28 bool is_overlay = ui::IsOverlayScrollbarEnabled();
29 ShellMode mode = Screen::GetInstance()->GetShellMode();
30 if (mode == ShellMode::Windowed) {
31 is_overlay = false;
32 }
33
34 return is_overlay;
35}
36
37} // namespace oxide
diff --git a/shared/browser/scrollbar_type.h b/shared/browser/scrollbar_type.h
0new file mode 10064438new file mode 100644
index 0000000..171a5ab
--- /dev/null
+++ b/shared/browser/scrollbar_type.h
@@ -0,0 +1,27 @@
1// vim:expandtab:shiftwidth=2:tabstop=2:
2// Copyright (C) 2016 Canonical Ltd.
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
18#ifndef _OXIDE_SHARED_BROWSER_SCROLLBAR_TYPE_H_
19#define _OXIDE_SHARED_BROWSER_SCROLLBAR_TYPE_H_
20
21namespace oxide {
22
23bool IsScrollbarTypeOverlay();
24
25} // namespace oxide
26
27#endif
diff --git a/shared/browser/web_contents_helper.cc b/shared/browser/web_contents_helper.cc
index ebcead1..8c0130a 100644
--- a/shared/browser/web_contents_helper.cc
+++ b/shared/browser/web_contents_helper.cc
@@ -21,18 +21,21 @@
2121
22#include "base/lazy_instance.h"22#include "base/lazy_instance.h"
23#include "base/logging.h"23#include "base/logging.h"
24#include "content/public/browser/render_process_host.h"
24#include "content/public/browser/render_view_host.h"25#include "content/public/browser/render_view_host.h"
25#include "content/public/browser/web_contents.h"26#include "content/public/browser/web_contents.h"
26#include "content/public/common/renderer_preferences.h"27#include "content/public/common/renderer_preferences.h"
27#include "ui/display/display.h"28#include "ui/display/display.h"
2829
29#include "shared/common/oxide_content_client.h"30#include "shared/common/oxide_content_client.h"
31#include "shared/common/oxide_messages.h"
3032
31#include "oxide_browser_context.h"33#include "oxide_browser_context.h"
32#include "oxide_user_agent_settings.h"34#include "oxide_user_agent_settings.h"
33#include "oxide_web_contents_unloader.h"35#include "oxide_web_contents_unloader.h"
34#include "oxide_web_contents_view.h"36#include "oxide_web_contents_view.h"
35#include "oxide_web_view.h"37#include "oxide_web_view.h"
38#include "scrollbar_type.h"
36#include "web_preferences.h"39#include "web_preferences.h"
3740
38namespace oxide {41namespace oxide {
@@ -126,6 +129,12 @@ void WebContentsHelper::OnDisplayPropertiesChanged(
126129
127void WebContentsHelper::OnShellModeChanged() {130void WebContentsHelper::OnShellModeChanged() {
128 SyncWebPreferences();131 SyncWebPreferences();
132 for (content::RenderProcessHost::iterator rph_iter(
133 content::RenderProcessHost::AllHostsIterator());
134 !rph_iter.IsAtEnd(); rph_iter.Advance()) {
135 rph_iter.GetCurrentValue()->Send(
136 new OxideMsg_ChangeScrollbarType(IsScrollbarTypeOverlay()));
137 }
129}138}
130139
131// static140// static
diff --git a/shared/common/oxide_messages.h b/shared/common/oxide_messages.h
index 0375b9b..d4cb12d 100644
--- a/shared/common/oxide_messages.h
+++ b/shared/common/oxide_messages.h
@@ -43,6 +43,8 @@ IPC_MESSAGE_CONTROL1(OxideMsg_UpdateUserScripts,
43IPC_MESSAGE_CONTROL1(OxideMsg_SetUserAgent,43IPC_MESSAGE_CONTROL1(OxideMsg_SetUserAgent,
44 std::string)44 std::string)
4545
46IPC_MESSAGE_CONTROL1(OxideMsg_ChangeScrollbarType, bool)
47
46IPC_MESSAGE_ROUTED1(OxideMsg_SendMessage,48IPC_MESSAGE_ROUTED1(OxideMsg_SendMessage,
47 oxide::ScriptMessageParams)49 oxide::ScriptMessageParams)
4850
diff --git a/shared/renderer/oxide_content_renderer_client.cc b/shared/renderer/oxide_content_renderer_client.cc
index 934c19b..063f51b 100644
--- a/shared/renderer/oxide_content_renderer_client.cc
+++ b/shared/renderer/oxide_content_renderer_client.cc
@@ -40,6 +40,7 @@
40#include "browser_controls_handler.h"40#include "browser_controls_handler.h"
41#include "oxide_renderer_user_agent_settings.h"41#include "oxide_renderer_user_agent_settings.h"
42#include "oxide_script_message_dispatcher_renderer.h"42#include "oxide_script_message_dispatcher_renderer.h"
43#include "oxide_scrollbar_state.h"
43#include "oxide_user_script_scheduler.h"44#include "oxide_user_script_scheduler.h"
44#include "oxide_user_script_slave.h"45#include "oxide_user_script_slave.h"
45#include "oxide_web_content_settings_client.h"46#include "oxide_web_content_settings_client.h"
@@ -60,7 +61,10 @@ void ContentRendererClient::RenderThreadStarted() {
6061
61 user_agent_settings_.reset(new RendererUserAgentSettings());62 user_agent_settings_.reset(new RendererUserAgentSettings());
62 thread->AddObserver(user_agent_settings_.get());63 thread->AddObserver(user_agent_settings_.get());
63 64
65 scrollbar_state_.reset(new ScrollbarState());
66 thread->AddObserver(scrollbar_state_.get());
67
64 new UserScriptSlave();68 new UserScriptSlave();
6569
66 net::NetModule::SetResourceProvider(NetResourceProvider);70 net::NetModule::SetResourceProvider(NetResourceProvider);
@@ -149,7 +153,8 @@ void ContentRendererClient::OverrideCompositorSettings(
149 // be able to have 2 different overlay scrollbar styles (a small153 // be able to have 2 different overlay scrollbar styles (a small
150 // non-hit-tested style for mobile and a much larger hit-tested style154 // non-hit-tested style for mobile and a much larger hit-tested style
151 // for desktop)155 // for desktop)
152 if (ui::IsOverlayScrollbarEnabled()) {156 if (ui::IsOverlayScrollbarEnabled() &&
157 (scrollbar_state_->IsScrollbarTypeOverlay())) {
153 // XXX: This will need updating if we support overlay scrollbars on158 // XXX: This will need updating if we support overlay scrollbars on
154 // desktop. See https://launchpad.net/bugs/1426567159 // desktop. See https://launchpad.net/bugs/1426567
155 settings->scrollbar_animator = cc::LayerTreeSettings::LINEAR_FADE;160 settings->scrollbar_animator = cc::LayerTreeSettings::LINEAR_FADE;
diff --git a/shared/renderer/oxide_content_renderer_client.h b/shared/renderer/oxide_content_renderer_client.h
index 9dbb950..5f971d9 100644
--- a/shared/renderer/oxide_content_renderer_client.h
+++ b/shared/renderer/oxide_content_renderer_client.h
@@ -30,6 +30,7 @@ class RendererMediaPlayerManager;
30#endif30#endif
3131
32class RendererUserAgentSettings;32class RendererUserAgentSettings;
33class ScrollbarState;
3334
34class ContentRendererClient : public content::ContentRendererClient {35class ContentRendererClient : public content::ContentRendererClient {
35 public:36 public:
@@ -59,6 +60,7 @@ class ContentRendererClient : public content::ContentRendererClient {
59 std::string GetUserAgentOverrideForURL(const GURL& url) override;60 std::string GetUserAgentOverrideForURL(const GURL& url) override;
6061
61 std::unique_ptr<RendererUserAgentSettings> user_agent_settings_;62 std::unique_ptr<RendererUserAgentSettings> user_agent_settings_;
63 std::unique_ptr<ScrollbarState> scrollbar_state_;
6264
63 DISALLOW_COPY_AND_ASSIGN(ContentRendererClient);65 DISALLOW_COPY_AND_ASSIGN(ContentRendererClient);
64};66};
diff --git a/shared/renderer/oxide_scrollbar_state.cc b/shared/renderer/oxide_scrollbar_state.cc
65new file mode 10064467new file mode 100644
index 0000000..e414f1e
--- /dev/null
+++ b/shared/renderer/oxide_scrollbar_state.cc
@@ -0,0 +1,54 @@
1// vim:expandtab:shiftwidth=2:tabstop=2:
2// Copyright (C) 2015 Canonical Ltd.
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
18#include "shared/renderer/oxide_scrollbar_state.h"
19
20#include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
21#include "third_party/WebKit/public/web/WebView.h"
22
23#include "base/command_line.h"
24#include "content/public/renderer/render_frame.h"
25#include "ipc/ipc_message_macros.h"
26#include "ui/native_theme/native_theme_switches.h"
27
28#include "shared/common/oxide_constants.h"
29#include "shared/common/oxide_messages.h"
30
31namespace oxide {
32
33ScrollbarState::ScrollbarState() {
34 scrollbar_type_overlay_ = ui::IsOverlayScrollbarEnabled();
35}
36
37ScrollbarState::~ScrollbarState() {}
38
39bool ScrollbarState::OnControlMessageReceived(const IPC::Message& message) {
40 bool handled = true;
41 IPC_BEGIN_MESSAGE_MAP(ScrollbarState, message)
42 IPC_MESSAGE_HANDLER(OxideMsg_ChangeScrollbarType, OnChangeScrollbarType)
43 IPC_MESSAGE_UNHANDLED(handled = false)
44 IPC_END_MESSAGE_MAP()
45
46 return handled;
47}
48
49void ScrollbarState::OnChangeScrollbarType(bool is_overlay) {
50 scrollbar_type_overlay_ = is_overlay;
51 blink::WebRuntimeFeatures::enableOverlayScrollbars(is_overlay);
52}
53
54} // namespace oxide
diff --git a/shared/renderer/oxide_scrollbar_state.h b/shared/renderer/oxide_scrollbar_state.h
0new file mode 10064455new file mode 100644
index 0000000..f643d3f
--- /dev/null
+++ b/shared/renderer/oxide_scrollbar_state.h
@@ -0,0 +1,47 @@
1// vim:expandtab:shiftwidth=2:tabstop=2:
2// Copyright (C) 2015 Canonical Ltd.
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
18#ifndef _OXIDE_SHARED_RENDERER_SHELL_MODE_STATE_H_
19#define _OXIDE_SHARED_RENDERER_SHELL_MODE_STATE_H_
20
21#include "content/public/renderer/render_thread_observer.h"
22
23#include "shared/browser/shell_mode.h"
24
25namespace oxide {
26
27class ScrollbarState : public content::RenderThreadObserver {
28 public:
29 ScrollbarState();
30 ~ScrollbarState() override;
31
32 bool IsScrollbarTypeOverlay() const { return scrollbar_type_overlay_; }
33
34 private:
35 // RenderThreadObserver implementation
36 bool OnControlMessageReceived(const IPC::Message& message) override;
37
38 void OnChangeScrollbarType(bool is_overlay);
39
40 bool scrollbar_type_overlay_;
41
42 DISALLOW_COPY_AND_ASSIGN(ScrollbarState);
43};
44
45} // namespace oxide
46
47#endif // _OXIDE_SHARED_RENDERER_SHELL_MODE_STATE_H_

Subscribers

People subscribed via source and target branches

to all changes: