Commit f017d8da authored by jcivelli@chromium.org's avatar jcivelli@chromium.org

Relanding 49339

It was unjustly reverted due to flaky unit-test failure.
Original review:

http://codereview.chromium.org/2358003

TBR=ctguil@chromium.org

Review URL: http://codereview.chromium.org/2720003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49344 0039d316-1c4b-4281-b951-d872f2087c98
parent ead48028
...@@ -19,13 +19,6 @@ ...@@ -19,13 +19,6 @@
namespace { namespace {
class AccessibilityWinBrowserTest : public InProcessBrowserTest { class AccessibilityWinBrowserTest : public InProcessBrowserTest {
public:
void SetUpCommandLine(CommandLine* command_line) {
// Turns on the accessibility in the renderer. Off by default until
// http://crbug.com/25564 is fixed.
command_line->AppendSwitch(switches::kEnableRendererAccessibility);
}
protected: protected:
IAccessible* GetRenderWidgetHostViewClientAccessible(); IAccessible* GetRenderWidgetHostViewClientAccessible();
}; };
...@@ -181,6 +174,20 @@ void AccessibleChecker::CheckAccessibleChildren(IAccessible* parent) { ...@@ -181,6 +174,20 @@ void AccessibleChecker::CheckAccessibleChildren(IAccessible* parent) {
IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
TestRendererAccessibilityTree) { TestRendererAccessibilityTree) {
// By requesting an accessible chrome will believe a screen reader has been
// detected.
ScopedComPtr<IAccessible> document_accessible(
GetRenderWidgetHostViewClientAccessible());
// The initial accessible returned should have state STATE_SYSTEM_BUSY while
// the accessibility tree is being requested from the renderer.
VARIANT var_state;
HRESULT hr = document_accessible->
get_accState(CreateI4Variant(CHILDID_SELF), &var_state);
EXPECT_EQ(hr, S_OK);
EXPECT_EQ(V_VT(&var_state), VT_I4);
EXPECT_EQ(V_I4(&var_state), STATE_SYSTEM_BUSY);
GURL tree_url( GURL tree_url(
"data:text/html,<html><head><title>Accessibility Win Test</title></head>" "data:text/html,<html><head><title>Accessibility Win Test</title></head>"
"<body><input type='button' value='push' /><input type='checkbox' />" "<body><input type='button' value='push' /><input type='checkbox' />"
...@@ -189,8 +196,7 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, ...@@ -189,8 +196,7 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
ui_test_utils::WaitForNotification( ui_test_utils::WaitForNotification(
NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
ScopedComPtr<IAccessible> document_accessible( document_accessible = GetRenderWidgetHostViewClientAccessible();
GetRenderWidgetHostViewClientAccessible());
ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL));
AccessibleChecker button_checker(L"push", ROLE_SYSTEM_PUSHBUTTON); AccessibleChecker button_checker(L"push", ROLE_SYSTEM_PUSHBUTTON);
...@@ -208,7 +214,7 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, ...@@ -208,7 +214,7 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
// Check that document accessible has a parent accessible. // Check that document accessible has a parent accessible.
ScopedComPtr<IDispatch> parent_dispatch; ScopedComPtr<IDispatch> parent_dispatch;
HRESULT hr = document_accessible->get_accParent(parent_dispatch.Receive()); hr = document_accessible->get_accParent(parent_dispatch.Receive());
EXPECT_EQ(hr, S_OK); EXPECT_EQ(hr, S_OK);
EXPECT_NE(parent_dispatch, reinterpret_cast<IDispatch*>(NULL)); EXPECT_NE(parent_dispatch, reinterpret_cast<IDispatch*>(NULL));
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/renderer_host/render_widget_host.h" #include "chrome/browser/renderer_host/render_widget_host.h"
#include "base/auto_reset.h" #include "base/auto_reset.h"
#include "base/command_line.h"
#include "base/histogram.h" #include "base/histogram.h"
#include "base/keyboard_codes.h" #include "base/keyboard_codes.h"
#include "base/message_loop.h" #include "base/message_loop.h"
...@@ -16,6 +17,7 @@ ...@@ -16,6 +17,7 @@
#include "chrome/browser/renderer_host/render_widget_host_painting_observer.h" #include "chrome/browser/renderer_host/render_widget_host_painting_observer.h"
#include "chrome/browser/renderer_host/render_widget_host_view.h" #include "chrome/browser/renderer_host/render_widget_host_view.h"
#include "chrome/browser/renderer_host/video_layer.h" #include "chrome/browser/renderer_host/video_layer.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/notification_service.h" #include "chrome/common/notification_service.h"
#include "chrome/common/render_messages.h" #include "chrome/common/render_messages.h"
#include "webkit/glue/webcursor.h" #include "webkit/glue/webcursor.h"
...@@ -58,6 +60,9 @@ static const int kHungRendererDelayMs = 20000; ...@@ -58,6 +60,9 @@ static const int kHungRendererDelayMs = 20000;
// in trailing scrolls after the user ends their input. // in trailing scrolls after the user ends their input.
static const int kMaxTimeBetweenWheelMessagesMs = 250; static const int kMaxTimeBetweenWheelMessagesMs = 250;
// static
bool RenderWidgetHost::renderer_accessible_ = false;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// RenderWidgetHost // RenderWidgetHost
...@@ -1111,6 +1116,35 @@ void RenderWidgetHost::RequestAccessibilityTree() { ...@@ -1111,6 +1116,35 @@ void RenderWidgetHost::RequestAccessibilityTree() {
Send(new ViewMsg_GetAccessibilityTree(routing_id())); Send(new ViewMsg_GetAccessibilityTree(routing_id()));
} }
void RenderWidgetHost::SetDocumentLoaded(bool document_loaded) {
document_loaded_ = document_loaded;
if (!document_loaded_)
requested_accessibility_tree_ = false;
if (renderer_accessible_ && document_loaded_) {
RequestAccessibilityTree();
requested_accessibility_tree_ = true;
}
}
void RenderWidgetHost::EnableRendererAccessibility() {
if (renderer_accessible_)
return;
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableRendererAccessibility)) {
return;
}
renderer_accessible_ = true;
if (document_loaded_ && !requested_accessibility_tree_) {
RequestAccessibilityTree();
requested_accessibility_tree_ = true;
}
}
void RenderWidgetHost::SetAccessibilityFocus(int acc_obj_id) { void RenderWidgetHost::SetAccessibilityFocus(int acc_obj_id) {
Send(new ViewMsg_SetAccessibilityFocus(routing_id(), acc_obj_id)); Send(new ViewMsg_SetAccessibilityFocus(routing_id(), acc_obj_id));
} }
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#define CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_H_ #define CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_H_
#include <deque> #include <deque>
#include <string>
#include <vector>
#include "app/surface/transport_dib.h" #include "app/surface/transport_dib.h"
#include "base/gtest_prod_util.h" #include "base/gtest_prod_util.h"
...@@ -370,6 +372,14 @@ class RenderWidgetHost : public IPC::Channel::Listener, ...@@ -370,6 +372,14 @@ class RenderWidgetHost : public IPC::Channel::Listener,
// Requests a snapshot of an accessible DOM tree from the renderer. // Requests a snapshot of an accessible DOM tree from the renderer.
void RequestAccessibilityTree(); void RequestAccessibilityTree();
// Aid for determining when an accessibility tree request can be made. Set by
// TabContents to true on document load and to false on page nativigation.
void SetDocumentLoaded(bool document_loaded);
// Enable renderer accessibility. This should only be called when a
// screenreader is detected.
void EnableRendererAccessibility();
// Relays a request from assistive technology to set focus to the // Relays a request from assistive technology to set focus to the
// node with this accessibility object id. // node with this accessibility object id.
void SetAccessibilityFocus(int acc_obj_id); void SetAccessibilityFocus(int acc_obj_id);
...@@ -530,6 +540,10 @@ class RenderWidgetHost : public IPC::Channel::Listener, ...@@ -530,6 +540,10 @@ class RenderWidgetHost : public IPC::Channel::Listener,
// input messages to be coalesced. // input messages to be coalesced.
void ProcessWheelAck(); void ProcessWheelAck();
// True if renderer accessibility is enabled. This should only be set when a
// screenreader is detected as it can potentially slow down Chrome.
static bool renderer_accessible_;
// The View associated with the RenderViewHost. The lifetime of this object // The View associated with the RenderViewHost. The lifetime of this object
// is associated with the lifetime of the Render process. If the Renderer // is associated with the lifetime of the Render process. If the Renderer
// crashes, its View is destroyed and this pointer becomes NULL, even though // crashes, its View is destroyed and this pointer becomes NULL, even though
...@@ -667,6 +681,14 @@ class RenderWidgetHost : public IPC::Channel::Listener, ...@@ -667,6 +681,14 @@ class RenderWidgetHost : public IPC::Channel::Listener,
// changed. // changed.
bool suppress_next_char_events_; bool suppress_next_char_events_;
// Keep track of if we have a loaded document so that we can request an
// accessibility tree on demand when renderer accessibility is enabled.
bool document_loaded_;
// Keep track of if we've already requested the accessibility tree so
// we don't do it more than once.
bool requested_accessibility_tree_;
// Optional video YUV layer for used for out-of-process compositing. // Optional video YUV layer for used for out-of-process compositing.
scoped_ptr<VideoLayer> video_layer_; scoped_ptr<VideoLayer> video_layer_;
......
...@@ -252,7 +252,6 @@ void DrawDeemphasized(const gfx::Rect& paint_rect, ...@@ -252,7 +252,6 @@ void DrawDeemphasized(const gfx::Rect& paint_rect,
paint_rect.width(), paint_rect.height()); paint_rect.width(), paint_rect.height());
canvas.getTopPlatformDevice().drawToHDC(paint_dc, paint_rect.x(), canvas.getTopPlatformDevice().drawToHDC(paint_dc, paint_rect.x(),
paint_rect.y(), NULL); paint_rect.y(), NULL);
} }
} // namespace } // namespace
...@@ -284,12 +283,15 @@ RenderWidgetHostViewWin::RenderWidgetHostViewWin(RenderWidgetHost* widget) ...@@ -284,12 +283,15 @@ RenderWidgetHostViewWin::RenderWidgetHostViewWin(RenderWidgetHost* widget)
is_loading_(false), is_loading_(false),
visually_deemphasized_(false) { visually_deemphasized_(false) {
render_widget_host_->set_view(this); render_widget_host_->set_view(this);
renderer_accessible_ =
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableRendererAccessibility);
registrar_.Add(this, registrar_.Add(this,
NotificationType::RENDERER_PROCESS_TERMINATED, NotificationType::RENDERER_PROCESS_TERMINATED,
NotificationService::AllSources()); NotificationService::AllSources());
BOOL screenreader_running = FALSE;
if (SystemParametersInfo(SPI_GETSCREENREADER, 0, &screenreader_running, 0) &&
screenreader_running) {
render_widget_host_->EnableRendererAccessibility();
}
} }
RenderWidgetHostViewWin::~RenderWidgetHostViewWin() { RenderWidgetHostViewWin::~RenderWidgetHostViewWin() {
...@@ -1483,6 +1485,9 @@ void RenderWidgetHostViewWin::UpdateAccessibilityTree( ...@@ -1483,6 +1485,9 @@ void RenderWidgetHostViewWin::UpdateAccessibilityTree(
const webkit_glue::WebAccessibility& tree) { const webkit_glue::WebAccessibility& tree) {
browser_accessibility_manager_.reset( browser_accessibility_manager_.reset(
new BrowserAccessibilityManager(m_hWnd, tree, this)); new BrowserAccessibilityManager(m_hWnd, tree, this));
::NotifyWinEvent(
IA2_EVENT_DOCUMENT_LOAD_COMPLETE, m_hWnd, OBJID_CLIENT, CHILDID_SELF);
} }
void RenderWidgetHostViewWin::OnAccessibilityFocusChange(int acc_obj_id) { void RenderWidgetHostViewWin::OnAccessibilityFocusChange(int acc_obj_id) {
...@@ -1542,18 +1547,46 @@ void RenderWidgetHostViewWin::AccessibilityDoDefaultAction(int acc_obj_id) { ...@@ -1542,18 +1547,46 @@ void RenderWidgetHostViewWin::AccessibilityDoDefaultAction(int acc_obj_id) {
LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam, LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam,
LPARAM lparam, BOOL& handled) { LPARAM lparam, BOOL& handled) {
// TODO(dmazzoni): http://crbug.com/25564 Disabling accessibility in the if (lparam != OBJID_CLIENT) {
// renderer is a temporary work-around until that bug is fixed.
if (!renderer_accessible_) {
handled = false; handled = false;
return static_cast<LRESULT>(0L); return static_cast<LRESULT>(0L);
} }
if (lparam == OBJID_CLIENT && browser_accessibility_manager_.get()) { if (!browser_accessibility_manager_.get()) {
render_widget_host_->EnableRendererAccessibility();
if (!loading_accessible_.get()) {
// Create IAccessible to return while waiting for the accessibility tree
// from the renderer.
HRESULT hr = ::CreateStdAccessibleObject(
m_hWnd, OBJID_CLIENT, IID_IAccessible,
reinterpret_cast<void **>(&loading_accessible_));
// Annotate with STATE_SYSTEM_BUSY to indicate that the page is loading.
// We annotate the HWND, not the loading_accessible IAccessible, but the
// IAccessible will reflect the state annotation.
ScopedComPtr<IAccPropServices> pAccPropServices;
hr = CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER,
IID_IAccPropServices, reinterpret_cast<void**>(&pAccPropServices));
if (SUCCEEDED(hr)) {
VARIANT var;
var.vt = VT_I4;
var.lVal = STATE_SYSTEM_BUSY;
pAccPropServices->SetHwndProp(m_hWnd, OBJID_CLIENT,
CHILDID_SELF, PROPID_ACC_STATE, var);
}
}
if (loading_accessible_.get()) {
return LresultFromObject(
IID_IAccessible, wparam,
static_cast<IAccessible*>(loading_accessible_));
}
} else {
BrowserAccessibility* root = browser_accessibility_manager_->GetRoot(); BrowserAccessibility* root = browser_accessibility_manager_->GetRoot();
if (root) { if (root) {
return LresultFromObject(IID_IAccessible, wparam, return LresultFromObject(IID_IAccessible, wparam,
static_cast<IAccessible*>(root->NewReference())); static_cast<IAccessible*>(root->NewReference()));
} }
} }
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#include <atlcrack.h> #include <atlcrack.h>
#include <atlmisc.h> #include <atlmisc.h>
#include <vector>
#include "base/scoped_comptr_win.h" #include "base/scoped_comptr_win.h"
#include "base/scoped_ptr.h" #include "base/scoped_ptr.h"
#include "base/task.h" #include "base/task.h"
...@@ -249,6 +251,9 @@ class RenderWidgetHostViewWin ...@@ -249,6 +251,9 @@ class RenderWidgetHostViewWin
// Whether the window should be activated. // Whether the window should be activated.
bool IsActivatable() const; bool IsActivatable() const;
// MSAA IAccessible returned while page contents is loading.
ScopedComPtr<IAccessible> loading_accessible_;
// The associated Model. // The associated Model.
RenderWidgetHost* render_widget_host_; RenderWidgetHost* render_widget_host_;
...@@ -320,11 +325,6 @@ class RenderWidgetHostViewWin ...@@ -320,11 +325,6 @@ class RenderWidgetHostViewWin
// value returns true for is_null() if we are not recording whiteout times. // value returns true for is_null() if we are not recording whiteout times.
base::TimeTicks whiteout_start_time_; base::TimeTicks whiteout_start_time_;
// Whether the renderer is made accessible.
// TODO(jcampan): http://b/issue?id=1432077 This is a temporary work-around
// until that bug is fixed.
bool renderer_accessible_;
// The time it took after this view was selected for it to be fully painted. // The time it took after this view was selected for it to be fully painted.
base::TimeTicks tab_switch_paint_time_; base::TimeTicks tab_switch_paint_time_;
......
...@@ -296,7 +296,6 @@ TabContents::TabContents(Profile* profile, ...@@ -296,7 +296,6 @@ TabContents::TabContents(Profile* profile,
opener_dom_ui_type_(DOMUIFactory::kNoDOMUI), opener_dom_ui_type_(DOMUIFactory::kNoDOMUI),
language_state_(&controller_), language_state_(&controller_),
geolocation_settings_state_(profile), geolocation_settings_state_(profile),
requested_accessibility_tree_(false),
closed_by_user_gesture_(false) { closed_by_user_gesture_(false) {
ClearBlockedContentSettings(); ClearBlockedContentSettings();
renderer_preferences_util::UpdateFromSystemSettings( renderer_preferences_util::UpdateFromSystemSettings(
...@@ -355,10 +354,6 @@ TabContents::TabContents(Profile* profile, ...@@ -355,10 +354,6 @@ TabContents::TabContents(Profile* profile,
// Set-up the showing of the omnibox search infobar if applicable. // Set-up the showing of the omnibox search infobar if applicable.
if (OmniboxSearchHint::IsEnabled(profile)) if (OmniboxSearchHint::IsEnabled(profile))
omnibox_search_hint_.reset(new OmniboxSearchHint(this)); omnibox_search_hint_.reset(new OmniboxSearchHint(this));
renderer_accessible_ =
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableRendererAccessibility);
} }
TabContents::~TabContents() { TabContents::~TabContents() {
...@@ -2147,10 +2142,8 @@ void TabContents::DidFailProvisionalLoadWithError( ...@@ -2147,10 +2142,8 @@ void TabContents::DidFailProvisionalLoadWithError(
void TabContents::DocumentLoadedInFrame() { void TabContents::DocumentLoadedInFrame() {
controller_.DocumentLoadedInFrame(); controller_.DocumentLoadedInFrame();
if (renderer_accessible_ && !requested_accessibility_tree_) {
render_view_host()->RequestAccessibilityTree(); render_view_host()->SetDocumentLoaded(true);
requested_accessibility_tree_ = true;
}
} }
void TabContents::OnContentBlocked(ContentSettingsType type) { void TabContents::OnContentBlocked(ContentSettingsType type) {
...@@ -2320,7 +2313,7 @@ void TabContents::DidNavigate(RenderViewHost* rvh, ...@@ -2320,7 +2313,7 @@ void TabContents::DidNavigate(RenderViewHost* rvh,
const ViewHostMsg_FrameNavigate_Params& params) { const ViewHostMsg_FrameNavigate_Params& params) {
int extra_invalidate_flags = 0; int extra_invalidate_flags = 0;
requested_accessibility_tree_ = false; render_view_host()->SetDocumentLoaded(false);
if (PageTransition::IsMainFrame(params.transition)) { if (PageTransition::IsMainFrame(params.transition)) {
bool was_bookmark_bar_visible = ShouldShowBookmarkBar(); bool was_bookmark_bar_visible = ShouldShowBookmarkBar();
......
...@@ -1282,15 +1282,6 @@ class TabContents : public PageNavigator, ...@@ -1282,15 +1282,6 @@ class TabContents : public PageNavigator,
// Manages information about Geolocation API usage in this page. // Manages information about Geolocation API usage in this page.
GeolocationSettingsState geolocation_settings_state_; GeolocationSettingsState geolocation_settings_state_;
// Whether the renderer is made accessible.
// TODO(dmazzoni): http://crbug.com/25564 This is a temporary work-around
// until that bug is fixed.
bool renderer_accessible_;
// Keep track of if we've already requested the accessibility tree so
// we don't do it more than once.
bool requested_accessibility_tree_;
// See description above setter. // See description above setter.
bool closed_by_user_gesture_; bool closed_by_user_gesture_;
......
...@@ -186,6 +186,9 @@ const char kDisablePromptOnRepost[] = "disable-prompt-on-repost"; ...@@ -186,6 +186,9 @@ const char kDisablePromptOnRepost[] = "disable-prompt-on-repost";
// this option is specified or not. // this option is specified or not.
const char kDisableRemoteFonts[] = "disable-remote-fonts"; const char kDisableRemoteFonts[] = "disable-remote-fonts";
// Turns off the accessibility in the renderer.
const char kDisableRendererAccessibility[] = "disable-renderer-accessibility";
// Disable session storage. // Disable session storage.
const char kDisableSessionStorage[] = "disable-session-storage"; const char kDisableSessionStorage[] = "disable-session-storage";
...@@ -339,10 +342,6 @@ const char kEnablePrintPreview[] = "enable-print-preview"; ...@@ -339,10 +342,6 @@ const char kEnablePrintPreview[] = "enable-print-preview";
// Enable Privacy Blacklists. // Enable Privacy Blacklists.
const char kEnablePrivacyBlacklists[] = "enable-privacy-blacklists"; const char kEnablePrivacyBlacklists[] = "enable-privacy-blacklists";
// Turns on the accessibility in the renderer. Off by default until
// http://b/issue?id=1432077 is fixed.
const char kEnableRendererAccessibility[] = "enable-renderer-accessibility";
// Enables StatsTable, logging statistics to a global named shared memory table. // Enables StatsTable, logging statistics to a global named shared memory table.
const char kEnableStatsTable[] = "enable-stats-table"; const char kEnableStatsTable[] = "enable-stats-table";
......
...@@ -67,6 +67,7 @@ extern const char kDisablePlugins[]; ...@@ -67,6 +67,7 @@ extern const char kDisablePlugins[];
extern const char kDisablePopupBlocking[]; extern const char kDisablePopupBlocking[];
extern const char kDisablePromptOnRepost[]; extern const char kDisablePromptOnRepost[];
extern const char kDisableRemoteFonts[]; extern const char kDisableRemoteFonts[];
extern const char kDisableRendererAccessibility[];
extern const char kDisableSessionStorage[]; extern const char kDisableSessionStorage[];
extern const char kDisableSharedWorkers[]; extern const char kDisableSharedWorkers[];
extern const char kDisableSiteSpecificQuirks[]; extern const char kDisableSiteSpecificQuirks[];
...@@ -112,7 +113,6 @@ extern const char kEnablePreparsedJsCaching[]; ...@@ -112,7 +113,6 @@ extern const char kEnablePreparsedJsCaching[];
extern const char kEnablePreconnect[]; extern const char kEnablePreconnect[];
extern const char kEnablePrintPreview[]; extern const char kEnablePrintPreview[];
extern const char kEnablePrivacyBlacklists[]; extern const char kEnablePrivacyBlacklists[];
extern const char kEnableRendererAccessibility[];
extern const char kEnableStatsTable[]; extern const char kEnableStatsTable[];
extern const char kEnableSync[]; extern const char kEnableSync[];
extern const char kEnableSyncAutofill[]; extern const char kEnableSyncAutofill[];
......
...@@ -296,8 +296,6 @@ void ProxyFactory::CreateProxy(ProxyFactory::ProxyCacheEntry* entry, ...@@ -296,8 +296,6 @@ void ProxyFactory::CreateProxy(ProxyFactory::ProxyCacheEntry* entry,
command_line->AppendSwitch(switches::kNoErrorDialogs); command_line->AppendSwitch(switches::kNoErrorDialogs);
#endif #endif
command_line->AppendSwitch(switches::kEnableRendererAccessibility);
// In headless mode runs like reliability test runs we want full crash dumps // In headless mode runs like reliability test runs we want full crash dumps
// from chrome. // from chrome.
if (IsHeadlessMode()) if (IsHeadlessMode())
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment