diff --git a/AUTHORS b/AUTHORS
index d7f0a3d..d231ba2 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -667,6 +667,7 @@
 Ravi Nanjundappa <nravi.n@samsung.com>
 Ravi Phaneendra Kasibhatla <r.kasibhatla@samsung.com>
 Ravi Phaneendra Kasibhatla <ravi.kasibhatla@motorola.com>
+Réda Housni Alaoui <alaoui.rda@gmail.com>
 Refael Ackermann <refack@gmail.com>
 Renata Hodovan <rhodovan.u-szeged@partner.samsung.com>
 Rene Bolldorf <rb@radix.io>
@@ -913,6 +914,7 @@
 Canonical Limited <*@canonical.com>
 Code Aurora Forum <*@codeaurora.org>
 Comodo CA Limited
+Cosium <*@cosium.com>
 Endless Mobile, Inc. <*@endlessm.com>
 Facebook, Inc. <*@fb.com>
 Facebook, Inc. <*@oculus.com>
diff --git a/DEPS b/DEPS
index eb1ccf36..d0c9c7e 100644
--- a/DEPS
+++ b/DEPS
@@ -74,11 +74,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '67a86d50f38d3a646ed165f7c6a7d58fda45cbab',
+  'skia_revision': '29c14a760682e2c449fa043b5e8b69937cb58f3a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'a49f2ad6c11516683d2be26e0203dba776c84cd3',
+  'v8_revision': 'eaa72a5e2c1eb2b4d1a4d1c28ffa31568e496680',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -288,7 +288,7 @@
     Var('boringssl_git') + '/boringssl.git' + '@' +  Var('boringssl_revision'),
 
   'src/third_party/breakpad/breakpad':
-    Var('chromium_git') + '/breakpad/breakpad.git' + '@' + 'a61afe7a3e865f1da7ff7185184fe23977c2adca',
+    Var('chromium_git') + '/breakpad/breakpad.git' + '@' + 'c283630201acedb25190d3b73ad0416fb55e4639',
 
   'src/third_party/catapult':
     Var('chromium_git') + '/catapult.git' + '@' + Var('catapult_revision'),
diff --git a/base/compiler_specific.h b/base/compiler_specific.h
index e4f005f..2b9cd02e 100644
--- a/base/compiler_specific.h
+++ b/base/compiler_specific.h
@@ -187,13 +187,6 @@
 #endif
 #endif
 
-// DISABLE_CFI_ICALL -- Disable Control Flow Integrity indirect call checks.
-#if !defined(DISABLE_CFI_ICALL) && defined(__clang__)
-#define DISABLE_CFI_ICALL __attribute__((no_sanitize("cfi-icall")))
-#else
-#define DISABLE_CFI_ICALL
-#endif
-
 // Macro useful for writing cross-platform function pointers.
 #if !defined(CDECL)
 #if defined(OS_WIN)
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
index 459ac99..13de1a2 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -942,11 +942,6 @@
     last_origin_filter_ = origin_filter;
   }
 
-  bool RequestIsUpload(const net::URLRequest& request) override {
-    NOTREACHED();
-    return true;
-  }
-
   int remove_calls() const { return remove_calls_; }
   int last_data_type_mask() const { return last_data_type_mask_; }
   base::Callback<bool(const GURL&)> last_origin_filter() const {
diff --git a/chrome/browser/media/router/discovery/BUILD.gn b/chrome/browser/media/router/discovery/BUILD.gn
index 4620d634..8c9d161 100644
--- a/chrome/browser/media/router/discovery/BUILD.gn
+++ b/chrome/browser/media/router/discovery/BUILD.gn
@@ -33,8 +33,12 @@
     "dial/dial_registry.h",
     "dial/dial_service.cc",
     "dial/dial_service.h",
+    "dial/parsed_dial_app_info.cc",
+    "dial/parsed_dial_app_info.h",
     "dial/parsed_dial_device_description.cc",
     "dial/parsed_dial_device_description.h",
+    "dial/safe_dial_app_info_parser.cc",
+    "dial/safe_dial_app_info_parser.h",
     "dial/safe_dial_device_description_parser.cc",
     "dial/safe_dial_device_description_parser.h",
     "mdns/cast_media_sink_service.cc",
diff --git a/chrome/browser/media/router/discovery/dial/README.md b/chrome/browser/media/router/discovery/dial/README.md
index 2efcb12..5b2ef44 100644
--- a/chrome/browser/media/router/discovery/dial/README.md
+++ b/chrome/browser/media/router/discovery/dial/README.md
@@ -8,3 +8,7 @@
 
 * [Dial Discovery design doc](https://docs.google.com/a/chromium.org/document/d/1vLpUgp5mJi6KFaCV3HEMQEZYDKtbcGdwcKNADuzuLzw/edit?usp=sharing)
 * [Media Router design doc](https://www.chromium.org/developers/design-documents/media-router)
+
+## DIAL specification
+
+* [DIAL Protocol Specification](http://www.dial-multiscreen.org/dial-protocol-specification)
diff --git a/chrome/browser/media/router/discovery/dial/parsed_dial_app_info.cc b/chrome/browser/media/router/discovery/dial/parsed_dial_app_info.cc
new file mode 100644
index 0000000..60cfad2
--- /dev/null
+++ b/chrome/browser/media/router/discovery/dial/parsed_dial_app_info.cc
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/media/router/discovery/dial/parsed_dial_app_info.h"
+
+namespace media_router {
+
+ParsedDialAppInfo::ParsedDialAppInfo() = default;
+ParsedDialAppInfo::~ParsedDialAppInfo() = default;
+
+}  // namespace media_router
diff --git a/chrome/browser/media/router/discovery/dial/parsed_dial_app_info.h b/chrome/browser/media/router/discovery/dial/parsed_dial_app_info.h
new file mode 100644
index 0000000..baaa783
--- /dev/null
+++ b/chrome/browser/media/router/discovery/dial/parsed_dial_app_info.h
@@ -0,0 +1,52 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DIAL_PARSED_DIAL_APP_INFO_H_
+#define CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DIAL_PARSED_DIAL_APP_INFO_H_
+
+#include <map>
+#include <string>
+
+namespace media_router {
+
+// Possible states of a DIAL application.
+enum class DialAppState {
+  kUnknown = 0,
+
+  // The application is installed and either starting or running.
+  kRunning,
+
+  // The application is installed and not running.
+  kStopped
+};
+
+struct ParsedDialAppInfo {
+  ParsedDialAppInfo();
+  ~ParsedDialAppInfo();
+
+  // Identifies the DIAL protocol version associated with the response.
+  std::string dial_version;
+
+  // The application name. Mandatory.
+  std::string name;
+
+  // Whether the DELETE operation is supported to stop a running application.
+  bool allow_stop = true;
+
+  // The reported state of the application.
+  DialAppState state = DialAppState::kUnknown;
+
+  // If the applications's state is RUNNING, the resource name for the running
+  // application.
+  std::string href;
+
+  // Application-specific data included with the GET response that is not part
+  // of the official specifications. Map of additional data value keyed by XML
+  // tag name.
+  std::map<std::string, std::string> extra_data;
+};
+
+}  // namespace media_router
+
+#endif  // CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DIAL_PARSED_DIAL_APP_INFO_H_
diff --git a/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc
new file mode 100644
index 0000000..6b4b187
--- /dev/null
+++ b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc
@@ -0,0 +1,160 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "base/memory/ptr_util.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/unguessable_token.h"
+#include "services/data_decoder/public/cpp/safe_xml_parser.h"
+#include "url/gurl.h"
+
+namespace media_router {
+
+namespace {
+
+DialAppState ParseDialAppState(const std::string& app_state) {
+  if (base::ToLowerASCII(app_state) == "running") {
+    return DialAppState::kRunning;
+  } else if (base::ToLowerASCII(app_state) == "stopped") {
+    return DialAppState::kStopped;
+  }
+  return DialAppState::kUnknown;
+}
+
+// Parses |child_element| content, and sets corresponding fields of
+// |out_app_info|. Returns ParsingError::kNone if parsing succeeds.
+SafeDialAppInfoParser::ParsingError ProcessChildElement(
+    const base::Value& child_element,
+    ParsedDialAppInfo* out_app_info) {
+  std::string tag_name;
+  if (!data_decoder::GetXmlElementTagName(child_element, &tag_name))
+    return SafeDialAppInfoParser::ParsingError::kInvalidXML;
+
+  if (tag_name == "name") {
+    if (!data_decoder::GetXmlElementText(child_element, &out_app_info->name))
+      return SafeDialAppInfoParser::ParsingError::kFailToReadName;
+  } else if (tag_name == "options") {
+    out_app_info->allow_stop = data_decoder::GetXmlElementAttribute(
+                                   child_element, "allowStop") != "false";
+  } else if (tag_name == "link") {
+    out_app_info->href =
+        data_decoder::GetXmlElementAttribute(child_element, "href");
+  } else if (tag_name == "state") {
+    std::string state;
+    if (!data_decoder::GetXmlElementText(child_element, &state))
+      return SafeDialAppInfoParser::ParsingError::kFailToReadState;
+    out_app_info->state = ParseDialAppState(state);
+  } else {
+    std::string extra_data;
+    if (!data_decoder::GetXmlElementText(child_element, &extra_data)) {
+      DVLOG(2) << "Fail to read extra data, <" << tag_name << ">"
+               << " is not a plain text element.";
+    } else {
+      out_app_info->extra_data[tag_name] = extra_data;
+    }
+  }
+
+  return SafeDialAppInfoParser::ParsingError::kNone;
+}
+
+// Returns ParsingError::kNone if mandatory fields (name, state) are valid.
+// |app_info|: app info object to be validated.
+SafeDialAppInfoParser::ParsingError ValidateParsedAppInfo(
+    const ParsedDialAppInfo& app_info) {
+  if (app_info.name.empty())
+    return SafeDialAppInfoParser::ParsingError::kMissingName;
+
+  if (app_info.state == DialAppState::kUnknown)
+    return SafeDialAppInfoParser::ParsingError::kInvalidState;
+
+  return SafeDialAppInfoParser::ParsingError::kNone;
+}
+
+}  // namespace
+
+// Note we generate a random batch ID so that parsing operations started from
+// this SafeDialAppInfoParser instance run in the same utility process.
+SafeDialAppInfoParser::SafeDialAppInfoParser(
+    service_manager::Connector* connector)
+    : connector_(connector),
+      xml_parser_batch_id_(base::UnguessableToken::Create().ToString()),
+      weak_factory_(this) {}
+
+SafeDialAppInfoParser::~SafeDialAppInfoParser() {}
+
+void SafeDialAppInfoParser::Parse(const std::string& xml_text,
+                                  ParseCallback callback) {
+  DVLOG(2) << "Parsing app info...";
+  DCHECK(callback);
+
+  data_decoder::ParseXml(
+      connector_, xml_text,
+      base::BindOnce(&SafeDialAppInfoParser::OnXmlParsingDone,
+                     weak_factory_.GetWeakPtr(), std::move(callback)),
+      xml_parser_batch_id_);
+}
+
+void SafeDialAppInfoParser::OnXmlParsingDone(
+    SafeDialAppInfoParser::ParseCallback callback,
+    std::unique_ptr<base::Value> value,
+    const base::Optional<std::string>& error) {
+  if (error) {
+    DVLOG(1) << "Fail to parse XML in utility process, error: "
+             << error.value();
+  }
+
+  if (!value || !value->is_dict()) {
+    std::move(callback).Run(nullptr, ParsingError::kInvalidXML);
+    return;
+  }
+
+  // NOTE: enforce namespace check for <service> element in future. Namespace
+  // value will be "urn:dial-multiscreen-org:schemas:dial".
+  bool unique_service = true;
+  const base::Value* service_element =
+      data_decoder::FindXmlElementPath(*value, {"service"}, &unique_service);
+  if (!service_element || !unique_service) {
+    std::move(callback).Run(nullptr, ParsingError::kInvalidXML);
+    return;
+  }
+
+  // Read optional @dialVer.
+  std::unique_ptr<ParsedDialAppInfo> app_info =
+      base::MakeUnique<ParsedDialAppInfo>();
+  app_info->dial_version =
+      data_decoder::GetXmlElementAttribute(*service_element, "dialVer");
+
+  // Fetch all the children of <service> element.
+  const base::Value* child_elements =
+      data_decoder::GetXmlElementChildren(*service_element);
+  if (!child_elements || !child_elements->is_list()) {
+    std::move(callback).Run(nullptr, ParsingError::kInvalidXML);
+    return;
+  }
+
+  ParsingError parsing_error = ParsingError::kNone;
+  for (const auto& child_element : child_elements->GetList()) {
+    parsing_error = ProcessChildElement(child_element, app_info.get());
+    if (parsing_error != ParsingError::kNone) {
+      std::move(callback).Run(nullptr, parsing_error);
+      return;
+    }
+  }
+
+  // Validate mandatory fields (name, state).
+  parsing_error = ValidateParsedAppInfo(*app_info);
+  if (parsing_error != ParsingError::kNone) {
+    std::move(callback).Run(nullptr, parsing_error);
+    return;
+  }
+
+  std::move(callback).Run(std::move(app_info), ParsingError::kNone);
+}
+
+}  // namespace media_router
diff --git a/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.h b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.h
new file mode 100644
index 0000000..dc90eea
--- /dev/null
+++ b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.h
@@ -0,0 +1,81 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DIAL_SAFE_DIAL_APP_INFO_PARSER_H_
+#define CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DIAL_SAFE_DIAL_APP_INFO_PARSER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/optional.h"
+#include "base/values.h"
+#include "chrome/browser/media/router/discovery/dial/parsed_dial_app_info.h"
+
+namespace service_manager {
+class Connector;
+}
+
+namespace media_router {
+
+// SafeDialAppInfoParser parses the given app info XML file safely via a utility
+// process.
+// Spec for DIAL app info XML:
+// http://www.dial-multiscreen.org/dial-protocol-specification
+// Section 6.1.2 Server response.
+class SafeDialAppInfoParser {
+ public:
+  enum class ParsingError {
+    kNone = 0,
+    kInvalidXML = 1,
+    kFailToReadName = 2,
+    kFailToReadState = 3,
+    kMissingName = 4,
+    kInvalidState = 5
+  };
+
+  // |connector| should be a valid connector to the ServiceManager.
+  explicit SafeDialAppInfoParser(service_manager::Connector* connector);
+  ~SafeDialAppInfoParser();
+
+  // Callback function invoked when done parsing DIAL app info XML.
+  // |app_info|: app info object. Empty if parsing failed.
+  // |parsing_error|: error encountered while parsing the DIAL app info XML.
+  using ParseCallback =
+      base::OnceCallback<void(std::unique_ptr<ParsedDialAppInfo> app_info,
+                              ParsingError parsing_error)>;
+
+  // Parses the DIAL app info in |xml_text| in a utility process.
+  // If the parsing succeeds, invokes callback with a valid
+  // |app_info|, otherwise invokes callback with an empty
+  // |app_info| and sets parsing error to detail the failure.
+  // Note that it's safe to call this method multiple times and when making
+  // multiple calls they may be grouped in the same utility process. The
+  // utility process is still cleaned up automatically if unused after some
+  // time, even if this object is still alive.
+  // Note also that the callback is not called if the object is deleted.
+  void Parse(const std::string& xml_text, ParseCallback callback);
+
+ private:
+  void OnXmlParsingDone(ParseCallback callback,
+                        std::unique_ptr<base::Value> value,
+                        const base::Optional<std::string>& error);
+
+  // Connector to the ServiceManager, used to retrieve the XmlParser service.
+  service_manager::Connector* const connector_;
+
+  // The batch ID used to group XML parsing calls to SafeXmlParser into a single
+  // process.
+  std::string xml_parser_batch_id_;
+
+  base::WeakPtrFactory<SafeDialAppInfoParser> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(SafeDialAppInfoParser);
+};
+
+}  // namespace media_router
+
+#endif  // CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_DIAL_SAFE_DIAL_APP_INFO_PARSER_H_
diff --git a/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser_unittest.cc b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser_unittest.cc
new file mode 100644
index 0000000..702bc28
--- /dev/null
+++ b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser_unittest.cc
@@ -0,0 +1,189 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+#include "chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/macros.h"
+#include "base/run_loop.h"
+#include "base/strings/string_util.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "services/data_decoder/data_decoder_service.h"
+#include "services/data_decoder/public/cpp/safe_xml_parser.h"
+#include "services/service_manager/public/cpp/test/test_connector_factory.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace media_router {
+
+namespace {
+
+constexpr char kValidAppInfoXml[] =
+    R"(<?xml version="1.0" encoding="UTF-8"?>
+       <service xmlns="urn:dial-multiscreen-org:schemas:dial">
+        <name>YouTube</name>
+        <options allowStop="false"/>
+        <state>running</state>
+        <link rel="run" href="run"/>
+       </service>
+    )";
+
+constexpr char kValidAppInfoXmlExtraData[] =
+    R"(<?xml version="1.0" encoding="UTF-8"?>
+       <service xmlns="urn:dial-multiscreen-org:schemas:dial">
+         <name>YouTube</name>
+         <state>Running</state>
+         <options allowStop="false"/>
+         <link rel="run" href="run"/>
+         <port>8080</port>
+         <capabilities>websocket</capabilities>
+         <additionalData>
+           <screenId>e5n3112oskr42pg0td55b38nh4</screenId>
+           <otherField>2</otherField>
+         </additionalData>
+       </service>
+    )";
+
+constexpr char kInvalidXmlNoState[] =
+    R"(<?xml version="1.0" encoding="UTF-8"?>
+       <service xmlns="urn:dial-multiscreen-org:schemas:dial">
+         <name>YouTube</name>
+         <state></state>
+         <options allowStop="false"/>
+         <link rel="run" href="run"/>
+       </service>
+    )";
+
+constexpr char kInvalidXmlInvalidState[] =
+    R"(<?xml version="1.0" encoding="UTF-8"?>
+       <service xmlns="urn:dial-multiscreen-org:schemas:dial">
+         <name>YouTube</name>
+         <options allowStop="false"/>
+         <state>xyzzy</state>
+         <link rel="run" href="run"/>
+       </service>
+    )";
+
+constexpr char kInvalidXmlNoName[] =
+    R"(<?xml version="1.0" encoding="UTF-8"?>
+       <service xmlns="urn:dial-multiscreen-org:schemas:dial">
+         <options allowStop="false"/>
+         <state>running</state>
+         <link rel="run" href="run"/>
+       </service>
+    )";
+
+constexpr char kInvalidXmlMultipleServices[] =
+    R"(<?xml version="1.0" encoding="UTF-8"?>
+       <root>
+         <service xmlns="urn:dial-multiscreen-org:schemas:dial">
+           <name>YouTube</name>
+           <options allowStop="false"/>
+           <state>running</state>
+         </service>
+         <service xmlns="urn:dial-multiscreen-org:schemas:dial">
+           <name>Netflix</name>
+           <options allowStop="false"/>
+           <state>running</state>
+         </service>
+       </root>
+    )";
+
+}  // namespace
+
+class SafeDialAppInfoParserTest : public testing::Test {
+ public:
+  SafeDialAppInfoParserTest()
+      : connector_factory_(
+            std::make_unique<data_decoder::DataDecoderService>()) {
+    connector_ = connector_factory_.CreateConnector();
+  }
+
+  std::unique_ptr<ParsedDialAppInfo> Parse(
+      const std::string& xml,
+      SafeDialAppInfoParser::ParsingError expected_error) {
+    base::RunLoop run_loop;
+    SafeDialAppInfoParser parser(connector_.get());
+    parser.Parse(xml,
+                 base::BindOnce(&SafeDialAppInfoParserTest::OnParsingCompleted,
+                                base::Unretained(this), expected_error));
+    base::RunLoop().RunUntilIdle();
+    return std::move(app_info_);
+  }
+
+  void OnParsingCompleted(SafeDialAppInfoParser::ParsingError expected_error,
+                          std::unique_ptr<ParsedDialAppInfo> app_info,
+                          SafeDialAppInfoParser::ParsingError error) {
+    app_info_ = std::move(app_info);
+    EXPECT_EQ(expected_error, error);
+  }
+
+ private:
+  content::TestBrowserThreadBundle test_browser_thread_bundle_;
+  std::unique_ptr<service_manager::Connector> connector_;
+  service_manager::TestConnectorFactory connector_factory_;
+  std::unique_ptr<ParsedDialAppInfo> app_info_;
+  DISALLOW_COPY_AND_ASSIGN(SafeDialAppInfoParserTest);
+};
+
+TEST_F(SafeDialAppInfoParserTest, TestInvalidXmlNoService) {
+  std::unique_ptr<ParsedDialAppInfo> app_info =
+      Parse("", SafeDialAppInfoParser::ParsingError::kInvalidXML);
+  EXPECT_FALSE(app_info);
+}
+
+TEST_F(SafeDialAppInfoParserTest, TestValidXml) {
+  std::string xml_text(kValidAppInfoXml);
+  std::unique_ptr<ParsedDialAppInfo> app_info =
+      Parse(xml_text, SafeDialAppInfoParser::ParsingError::kNone);
+
+  EXPECT_EQ("YouTube", app_info->name);
+  EXPECT_EQ(DialAppState::kRunning, app_info->state);
+  EXPECT_FALSE(app_info->allow_stop);
+  EXPECT_EQ("run", app_info->href);
+  EXPECT_TRUE(app_info->extra_data.empty());
+}
+
+TEST_F(SafeDialAppInfoParserTest, TestValidXmlExtraData) {
+  std::string xml_text(kValidAppInfoXmlExtraData);
+  std::unique_ptr<ParsedDialAppInfo> app_info =
+      Parse(xml_text, SafeDialAppInfoParser::ParsingError::kNone);
+
+  EXPECT_EQ("YouTube", app_info->name);
+  EXPECT_EQ(DialAppState::kRunning, app_info->state);
+  EXPECT_EQ(2u, app_info->extra_data.size());
+  EXPECT_EQ("8080", app_info->extra_data["port"]);
+  EXPECT_EQ("websocket", app_info->extra_data["capabilities"]);
+}
+
+TEST_F(SafeDialAppInfoParserTest, TestInvalidXmlNoState) {
+  std::string xml_text(kInvalidXmlNoState);
+  std::unique_ptr<ParsedDialAppInfo> app_info =
+      Parse(xml_text, SafeDialAppInfoParser::ParsingError::kFailToReadState);
+  EXPECT_FALSE(app_info);
+}
+
+TEST_F(SafeDialAppInfoParserTest, TestInvalidXmlInvalidState) {
+  std::string xml_text(kInvalidXmlInvalidState);
+  std::unique_ptr<ParsedDialAppInfo> app_info =
+      Parse(xml_text, SafeDialAppInfoParser::ParsingError::kInvalidState);
+  EXPECT_FALSE(app_info);
+}
+
+TEST_F(SafeDialAppInfoParserTest, TestInvalidXmlNoName) {
+  std::string xml_text(kInvalidXmlNoName);
+  std::unique_ptr<ParsedDialAppInfo> app_info =
+      Parse(xml_text, SafeDialAppInfoParser::ParsingError::kMissingName);
+  EXPECT_FALSE(app_info);
+}
+
+TEST_F(SafeDialAppInfoParserTest, TestInvalidXmlMultipleServices) {
+  std::string xml_text(kInvalidXmlMultipleServices);
+  std::unique_ptr<ParsedDialAppInfo> app_info =
+      Parse(xml_text, SafeDialAppInfoParser::ParsingError::kInvalidXML);
+  EXPECT_FALSE(app_info);
+}
+
+}  // namespace media_router
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js
index 985543b..17bbafb 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.js
+++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -398,6 +398,15 @@
  * them to the iframe.
  */
 function reloadTiles() {
+  // Don't attempt to load tiles if the MV data isn't available yet - this can
+  // happen occasionally, see https://crbug.com/794942. In that case, we should
+  // get an onMostVisitedChange call once they are available.
+  // Note that MV data being available is different from having > 0 tiles. There
+  // can legitimately be 0 tiles, e.g. if the user blacklisted them all.
+  if (!ntpApiHandle.mostVisitedAvailable) {
+    return;
+  }
+
   var pages = ntpApiHandle.mostVisited;
   var cmds = [];
   for (var i = 0; i < Math.min(MAX_NUM_TILES_TO_SHOW, pages.length); ++i) {
diff --git a/chrome/browser/resources/local_ntp/most_visited_single.js b/chrome/browser/resources/local_ntp/most_visited_single.js
index 3a74405..c4c0bfe 100644
--- a/chrome/browser/resources/local_ntp/most_visited_single.js
+++ b/chrome/browser/resources/local_ntp/most_visited_single.js
@@ -199,6 +199,8 @@
   if (cmd == 'tile') {
     addTile(data);
   } else if (cmd == 'show') {
+    // TODO(treib): If this happens before we have finished loading the previous
+    // tiles, we probably get into a bad state.
     showTiles(data);
   } else if (cmd == 'updateTheme') {
     updateTheme(data);
diff --git a/chrome/renderer/resources/extensions/media_router_bindings.js b/chrome/renderer/resources/extensions/media_router_bindings.js
index 936e2a200..6d5f113 100644
--- a/chrome/renderer/resources/extensions/media_router_bindings.js
+++ b/chrome/renderer/resources/extensions/media_router_bindings.js
@@ -497,7 +497,7 @@
     'domain': sink.domain,
     'sinkId': sink.id,
     'iconType': sinkIconTypeToMojo(sink.iconType),
-    'provider_id': mediaRouter.mojom.MediaRouteProvider.Id.EXTENSION,
+    'providerId': mediaRouter.mojom.MediaRouteProvider.Id.EXTENSION,
   });
 }
 
diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc
index fe5638d3..575c605 100644
--- a/chrome/renderer/searchbox/searchbox.cc
+++ b/chrome/renderer/searchbox/searchbox.cc
@@ -219,6 +219,7 @@
       is_input_in_progress_(false),
       is_key_capture_enabled_(false),
       most_visited_items_cache_(kMaxInstantMostVisitedItemCacheSize),
+      has_received_most_visited_(false),
       weak_ptr_factory_(this) {
   // Connect to the embedded search interface in the browser.
   chrome::mojom::EmbeddedSearchConnectorAssociatedPtr connector;
@@ -282,6 +283,10 @@
   most_visited_items_cache_.GetCurrentItems(items);
 }
 
+bool SearchBox::AreMostVisitedItemsAvailable() const {
+  return has_received_most_visited_;
+}
+
 bool SearchBox::GetMostVisitedItemWithID(
     InstantRestrictedID most_visited_item_id,
     InstantMostVisitedItem* item) const {
@@ -368,6 +373,8 @@
 
 void SearchBox::MostVisitedChanged(
     const std::vector<InstantMostVisitedItem>& items) {
+  has_received_most_visited_ = true;
+
   std::vector<InstantMostVisitedItemIDPair> last_known_items;
   GetMostVisitedItems(&last_known_items);
 
diff --git a/chrome/renderer/searchbox/searchbox.h b/chrome/renderer/searchbox/searchbox.h
index aaade1b..2f7394d3 100644
--- a/chrome/renderer/searchbox/searchbox.h
+++ b/chrome/renderer/searchbox/searchbox.h
@@ -95,6 +95,8 @@
   void GetMostVisitedItems(
       std::vector<InstantMostVisitedItemIDPair>* items) const;
 
+  bool AreMostVisitedItemsAvailable() const;
+
   // If the |most_visited_item_id| is found in the cache, sets |item| to it
   // and returns true.
   bool GetMostVisitedItemWithID(InstantRestrictedID most_visited_item_id,
@@ -165,6 +167,7 @@
   bool is_input_in_progress_;
   bool is_key_capture_enabled_;
   InstantRestrictedIDCache<InstantMostVisitedItem> most_visited_items_cache_;
+  bool has_received_most_visited_;
   ThemeBackgroundInfo theme_info_;
 
   base::WeakPtrFactory<SearchBox> weak_ptr_factory_;
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc
index b83fd3d..3525182 100644
--- a/chrome/renderer/searchbox/searchbox_extension.cc
+++ b/chrome/renderer/searchbox/searchbox_extension.cc
@@ -549,6 +549,7 @@
   // Handlers for JS properties.
   static bool IsInputInProgress();
   static v8::Local<v8::Value> GetMostVisited(v8::Isolate* isolate);
+  static bool GetMostVisitedAvailable(v8::Isolate* isolate);
   static v8::Local<v8::Value> GetThemeBackgroundInfo(v8::Isolate* isolate);
 
   // Handlers for JS functions visible to all NTPs.
@@ -592,6 +593,8 @@
   return gin::Wrappable<NewTabPageBindings>::GetObjectTemplateBuilder(isolate)
       .SetProperty("isInputInProgress", &NewTabPageBindings::IsInputInProgress)
       .SetProperty("mostVisited", &NewTabPageBindings::GetMostVisited)
+      .SetProperty("mostVisitedAvailable",
+                   &NewTabPageBindings::GetMostVisitedAvailable)
       .SetProperty("themeBackgroundInfo",
                    &NewTabPageBindings::GetThemeBackgroundInfo)
       .SetMethod("checkIsUserSignedIntoChromeAs",
@@ -659,6 +662,15 @@
 }
 
 // static
+bool NewTabPageBindings::GetMostVisitedAvailable(v8::Isolate* isolate) {
+  const SearchBox* search_box = GetSearchBoxForCurrentContext();
+  if (!search_box)
+    return false;
+
+  return search_box->AreMostVisitedItemsAvailable();
+}
+
+// static
 v8::Local<v8::Value> NewTabPageBindings::GetThemeBackgroundInfo(
     v8::Isolate* isolate) {
   const SearchBox* search_box = GetSearchBoxForCurrentContext();
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 105b8177..3374481b 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -2959,6 +2959,7 @@
       "../browser/media/router/discovery/dial/dial_media_sink_service_unittest.cc",
       "../browser/media/router/discovery/dial/dial_registry_unittest.cc",
       "../browser/media/router/discovery/dial/dial_service_unittest.cc",
+      "../browser/media/router/discovery/dial/safe_dial_app_info_parser_unittest.cc",
       "../browser/media/router/discovery/dial/safe_dial_device_description_parser_unittest.cc",
       "../browser/media/router/discovery/mdns/cast_media_sink_service_impl_unittest.cc",
       "../browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc",
diff --git a/content/browser/webrtc/webrtc_image_capture_browsertest.cc b/content/browser/webrtc/webrtc_image_capture_browsertest.cc
index f4757d0..2028b32 100644
--- a/content/browser/webrtc/webrtc_image_capture_browsertest.cc
+++ b/content/browser/webrtc/webrtc_image_capture_browsertest.cc
@@ -46,13 +46,26 @@
 
 static const char kImageCaptureHtmlFile[] = "/media/image_capture_test.html";
 
+enum class Camera {
+  FAKE,
+  DEFAULT,
+#if defined(OS_WIN)
+  // Media Foundation is only available in Windows versions >= 7, below that the
+  // following flag has no effect
+  WIN_MEDIA_FOUNDATION
+#endif
+};
+
 // TODO(mcasas): enable real-camera tests by disabling the Fake Device for
 // platforms where the ImageCaptureCode is landed, https://crbug.com/656810
 static struct TargetCamera {
-  bool use_fake;
-} const kTargetCameras[] = {{true},
+  Camera camera;
+} const kTargetCameras[] = {{Camera::FAKE},
 #if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_ANDROID)
-                            {false}
+                            {Camera::DEFAULT},
+#endif
+#if defined(OS_WIN)
+                            {Camera::WIN_MEDIA_FOUNDATION}
 #endif
 };
 
@@ -145,11 +158,23 @@
   void SetUpCommandLine(base::CommandLine* command_line) override {
     WebRtcImageCaptureBrowserTestBase::SetUpCommandLine(command_line);
 
-    if (std::get<0>(GetParam()).use_fake) {
-      base::CommandLine::ForCurrentProcess()->AppendSwitch(
-          switches::kUseFakeDeviceForMediaStream);
-      ASSERT_TRUE(base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kUseFakeDeviceForMediaStream));
+    switch (std::get<0>(GetParam()).camera) {
+      case Camera::FAKE:
+        base::CommandLine::ForCurrentProcess()->AppendSwitch(
+            switches::kUseFakeDeviceForMediaStream);
+        ASSERT_TRUE(base::CommandLine::ForCurrentProcess()->HasSwitch(
+            switches::kUseFakeDeviceForMediaStream));
+        break;
+#if defined(OS_WIN)
+      case Camera::WIN_MEDIA_FOUNDATION:
+        base::CommandLine::ForCurrentProcess()->AppendSwitch(
+            switches::kForceMediaFoundationVideoCapture);
+        ASSERT_TRUE(base::CommandLine::ForCurrentProcess()->HasSwitch(
+            switches::kForceMediaFoundationVideoCapture));
+        break;
+#endif
+      default:
+        break;
     }
   }
 
@@ -157,7 +182,7 @@
     // TODO(chfremer): Enable test cases using the video capture service with
     // real cameras as soon as root cause for https://crbug.com/733582 is
     // understood and resolved.
-    if ((!std::get<0>(GetParam()).use_fake) &&
+    if ((std::get<0>(GetParam()).camera != Camera::FAKE) &&
         (std::get<1>(GetParam()).use_video_capture_service)) {
       LOG(INFO) << "Skipping this test case";
       return true;
diff --git a/content/test/data/media/image_capture_test.html b/content/test/data/media/image_capture_test.html
index beb85fa..5239163 100644
--- a/content/test/data/media/image_capture_test.html
+++ b/content/test/data/media/image_capture_test.html
@@ -6,7 +6,7 @@
 <body>
 <script type="text/javascript" src="webrtc_test_utilities.js"></script>
 <script>
-const WIDTH = 320;
+const WIDTH = 640;
 /** @const */ var CONSTRAINTS = { width: { max : WIDTH } };
 
 // Returns a Promise resolved with |object| after a delay of |delayInMs|.
diff --git a/gpu/command_buffer/service/passthrough_program_cache.cc b/gpu/command_buffer/service/passthrough_program_cache.cc
index 207c679..ea257fa7 100644
--- a/gpu/command_buffer/service/passthrough_program_cache.cc
+++ b/gpu/command_buffer/service/passthrough_program_cache.cc
@@ -31,7 +31,7 @@
 bool ProgramCacheControlExtensionAvailable() {
 #if defined(USE_EGL)
   // The display should be initialized if the extension is available.
-  return gl::g_driver_egl->ext.b_EGL_ANGLE_program_cache_control;
+  return gl::g_driver_egl.ext.b_EGL_ANGLE_program_cache_control;
 #else
   return false;
 #endif  // defined(USE_EGL)
diff --git a/gpu/command_buffer/service/texture_definition.cc b/gpu/command_buffer/service/texture_definition.cc
index f1d424af..4105482a 100644
--- a/gpu/command_buffer/service/texture_definition.cc
+++ b/gpu/command_buffer/service/texture_definition.cc
@@ -155,8 +155,8 @@
   DCHECK_NE(EGL_NO_DISPLAY, egl_display);
   DCHECK(glIsTexture(texture_id));
 
-  DCHECK(gl::g_driver_egl->ext.b_EGL_KHR_image_base &&
-         gl::g_driver_egl->ext.b_EGL_KHR_gl_texture_2D_image &&
+  DCHECK(gl::g_driver_egl.ext.b_EGL_KHR_image_base &&
+         gl::g_driver_egl.ext.b_EGL_KHR_gl_texture_2D_image &&
          gl::g_current_gl_driver->ext.b_GL_OES_EGL_image);
 
   const EGLint egl_attrib_list[] = {
diff --git a/ios/web/BUILD.gn b/ios/web/BUILD.gn
index 7971d32..2f6b241 100644
--- a/ios/web/BUILD.gn
+++ b/ios/web/BUILD.gn
@@ -257,6 +257,7 @@
     "navigation/placeholder_navigation_util_unittest.mm",
     "navigation/serializable_user_data_manager_impl_unittest.mm",
     "navigation/wk_based_navigation_manager_impl_unittest.mm",
+    "navigation/wk_based_restore_session_util_unittest.mm",
   ]
 }
 
diff --git a/ios/web/navigation/BUILD.gn b/ios/web/navigation/BUILD.gn
index f0e1216..d90958c 100644
--- a/ios/web/navigation/BUILD.gn
+++ b/ios/web/navigation/BUILD.gn
@@ -43,6 +43,8 @@
     "time_smoother.h",
     "wk_based_navigation_manager_impl.h",
     "wk_based_navigation_manager_impl.mm",
+    "wk_based_restore_session_util.h",
+    "wk_based_restore_session_util.mm",
   ]
 
   configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/web/navigation/wk_based_navigation_manager_impl.mm b/ios/web/navigation/wk_based_navigation_manager_impl.mm
index f582e51..cbcf1b2 100644
--- a/ios/web/navigation/wk_based_navigation_manager_impl.mm
+++ b/ios/web/navigation/wk_based_navigation_manager_impl.mm
@@ -7,23 +7,19 @@
 #import <Foundation/Foundation.h>
 #include <memory>
 
-#include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/mac/bundle_locations.h"
 #include "base/memory/ptr_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/sys_string_conversions.h"
-#include "base/values.h"
 #import "ios/web/navigation/crw_navigation_item_holder.h"
 #import "ios/web/navigation/navigation_item_impl.h"
 #include "ios/web/navigation/navigation_item_impl_list.h"
 #import "ios/web/navigation/navigation_manager_delegate.h"
+#include "ios/web/navigation/wk_based_restore_session_util.h"
 #include "ios/web/public/load_committed_details.h"
 #import "ios/web/public/navigation_item.h"
 #import "ios/web/public/web_client.h"
 #import "ios/web/web_state/ui/crw_web_view_navigation_proxy.h"
 #import "net/base/mac/url_conversions.h"
-#include "net/base/url_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -383,38 +379,17 @@
   // TODO(crbug.com/771200): Retain these original NavigationItems restored from
   // storage and associate them with new WKBackForwardListItems created after
   // history restore so information such as scroll position is restored.
-
-  // The URLs and titles of the restored entries are stored in two separate
-  // lists instead of a single list of objects to reduce the size of the JSON
-  // string to be included in the query parameter.
-  base::Value restored_urls(base::Value::Type::LIST);
-  base::Value restored_titles(base::Value::Type::LIST);
-  restored_urls.GetList().reserve(items.size());
-  restored_titles.GetList().reserve(items.size());
-  for (size_t index = 0; index < items.size(); index++) {
-    restored_urls.GetList().push_back(
-        base::Value(items[index]->GetURL().spec()));
-    restored_titles.GetList().push_back(base::Value(items[index]->GetTitle()));
-  }
-  base::Value session(base::Value::Type::DICTIONARY);
-  int offset = last_committed_item_index + 1 - items.size();
-  session.SetKey("offset", base::Value(offset));
-  session.SetKey("urls", std::move(restored_urls));
-  session.SetKey("titles", std::move(restored_titles));
-
-  std::string session_json;
-  base::JSONWriter::Write(session, &session_json);
-
-  std::string restore_session_resource_path = base::SysNSStringToUTF8(
-      [base::mac::FrameworkBundle() pathForResource:@"restore_session"
-                                             ofType:@"html"]);
-  std::string url_spec = base::StringPrintf(
-      "%s://%s", url::kFileScheme, restore_session_resource_path.c_str());
-  GURL url = net::AppendQueryParameter(GURL(url_spec), "session", session_json);
+  GURL url = CreateRestoreSessionUrl(last_committed_item_index, items);
 
   WebLoadParams params(url);
+  // It's not clear how this transition type will be used and what's the impact.
+  // For now, use RELOAD because restoring history is kind of like a reload of
+  // the current page.
   params.transition_type = ui::PAGE_TRANSITION_RELOAD;
   LoadURLWithParams(params);
+
+  GetPendingItemImpl()->SetVirtualURL(
+      items[last_committed_item_index]->GetVirtualURL());
 }
 
 NavigationItemImpl* WKBasedNavigationManagerImpl::GetNavigationItemImplAtIndex(
@@ -444,6 +419,20 @@
           net::GURLWithNSURL(prev_wk_item.URL),
           nullptr /* use default rewriters only */);
   new_item->SetTimestamp(time_smoother_.GetSmoothedTime(base::Time::Now()));
+  const GURL& url = new_item->GetURL();
+  // If this navigation item has a restore_session.html URL, then it was created
+  // to restore session history and will redirect to the target URL encoded in
+  // the query parameter automatically. Set virtual URL to the target URL so the
+  // internal restore_session.html is not exposed in the UI and to URL-sensing
+  // components outside of //ios/web layer.
+  if (IsRestoreSessionUrl(url)) {
+    GURL virtual_url;
+    bool success = ExtractTargetURL(url, &virtual_url);
+    DCHECK(success);
+    if (success)
+      new_item->SetVirtualURL(virtual_url);
+  }
+
   SetNavigationItemInWKItem(wk_item, std::move(new_item));
   return GetNavigationItemFromWKItem(wk_item);
 }
diff --git a/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm b/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm
index 1b74274..f658b2a7 100644
--- a/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm
+++ b/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm
@@ -8,10 +8,12 @@
 #include <memory>
 
 #include "base/memory/ptr_util.h"
+#include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #import "ios/web/navigation/navigation_manager_delegate.h"
 #import "ios/web/navigation/navigation_manager_impl.h"
+#include "ios/web/navigation/wk_based_restore_session_util.h"
 #include "ios/web/public/load_committed_details.h"
 #include "ios/web/public/navigation_item.h"
 #include "ios/web/public/test/fakes/test_browser_state.h"
@@ -583,9 +585,11 @@
   GURL pending_url = pending_item->GetURL();
   EXPECT_TRUE(pending_url.SchemeIsFile());
   EXPECT_EQ("restore_session.html", pending_url.ExtractFileName());
+  EXPECT_EQ("http://www.0.com/", pending_item->GetVirtualURL());
 
   std::string session_json;
-  net::GetValueForKeyInQuery(pending_url, "session", &session_json);
+  net::GetValueForKeyInQuery(pending_url, kRestoreSessionSessionQueryKey,
+                             &session_json);
   EXPECT_EQ(
       "{\"offset\":-1,\"titles\":[\"Test Website 0\",\"\"],"
       "\"urls\":[\"http://www.0.com/\",\"http://www.1.com/\"]}",
@@ -660,4 +664,19 @@
   ASSERT_EQ(nullptr, manager_->GetPendingItem());
 }
 
+// Tests that the virtual URL of a restore_session redirect item is updated to
+// the target URL.
+TEST_F(WKBasedNavigationManagerTest, HideInternalRedirectUrl) {
+  GURL target_url = GURL("http://www.1.com?query=special%26chars");
+  GURL url = net::AppendQueryParameter(GetRestoreSessionBaseUrl(),
+                                       kRestoreSessionTargetUrlQueryKey,
+                                       target_url.spec());
+  NSString* url_spec = base::SysUTF8ToNSString(url.spec());
+  [mock_wk_list_ setCurrentURL:url_spec];
+  NavigationItem* item = manager_->GetItemAtIndex(0);
+  ASSERT_TRUE(item);
+  EXPECT_EQ(target_url, item->GetVirtualURL());
+  EXPECT_EQ(url, item->GetURL());
+}
+
 }  // namespace web
diff --git a/ios/web/navigation/wk_based_restore_session_util.h b/ios/web/navigation/wk_based_restore_session_util.h
new file mode 100644
index 0000000..7cf27f1
--- /dev/null
+++ b/ios/web/navigation/wk_based_restore_session_util.h
@@ -0,0 +1,48 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// This file contains utility functions for WKBasedNavigationManagerImpl.
+
+#ifndef IOS_WEB_NAVIGATION_WK_BASED_RESTORE_SESSION_UTIL_H_
+#define IOS_WEB_NAVIGATION_WK_BASED_RESTORE_SESSION_UTIL_H_
+
+#include <memory>
+#include <vector>
+
+#include "url/gurl.h"
+
+namespace web {
+
+class NavigationItem;
+
+// Query parameter key used to encode the session history to inject in a
+// restore_session.html URL.
+extern const char kRestoreSessionSessionQueryKey[];
+
+// Query parameter key used to encode target URL in a restore_session.html URL.
+extern const char kRestoreSessionTargetUrlQueryKey[];
+
+// Returns a file:// URL that points to the magic restore_session.html file.
+// This is used in unit tests.
+GURL GetRestoreSessionBaseUrl();
+
+// Creates a restore_session.html URL with the provided session history encoded
+// in the query argument, such that when this URL is loaded in the web view,
+// recreates all the history entries in |items| and the current loaded item is
+// the entry at |last_committed_item_index|.
+GURL CreateRestoreSessionUrl(
+    int last_committed_item_index,
+    const std::vector<std::unique_ptr<NavigationItem>>& items);
+
+// Returns true if the base URL of |url| is restore_session.html.
+bool IsRestoreSessionUrl(const GURL& url);
+
+// Extracts the URL encoded in the 'targetUrl' query component of
+// |restore_session_url| to |target_url| and returns true. If no such query
+// component exists, returns false.
+bool ExtractTargetURL(const GURL& restore_session_url, GURL* target_url);
+
+}  // namespace web
+
+#endif  // IOS_WEB_NAVIGATION_WK_BASED_RESTORE_SESSION_UTIL_H_
diff --git a/ios/web/navigation/wk_based_restore_session_util.mm b/ios/web/navigation/wk_based_restore_session_util.mm
new file mode 100644
index 0000000..be5788b6
--- /dev/null
+++ b/ios/web/navigation/wk_based_restore_session_util.mm
@@ -0,0 +1,77 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ios/web/navigation/wk_based_restore_session_util.h"
+
+#include "base/json/json_writer.h"
+#include "base/mac/bundle_locations.h"
+#include "base/strings/sys_string_conversions.h"
+#include "base/values.h"
+#import "ios/web/public/navigation_item.h"
+#include "net/base/url_util.h"
+#include "url/url_constants.h"
+
+namespace web {
+
+const char kRestoreSessionSessionQueryKey[] = "session";
+const char kRestoreSessionTargetUrlQueryKey[] = "targetUrl";
+
+GURL GetRestoreSessionBaseUrl() {
+  std::string restore_session_resource_path = base::SysNSStringToUTF8(
+      [base::mac::FrameworkBundle() pathForResource:@"restore_session"
+                                             ofType:@"html"]);
+  GURL::Replacements replacements;
+  replacements.SetSchemeStr(url::kFileScheme);
+  replacements.SetPathStr(restore_session_resource_path);
+  return GURL(url::kAboutBlankURL).ReplaceComponents(replacements);
+}
+
+GURL CreateRestoreSessionUrl(
+    int last_committed_item_index,
+    const std::vector<std::unique_ptr<NavigationItem>>& items) {
+  DCHECK(last_committed_item_index >= 0 &&
+         last_committed_item_index < static_cast<int>(items.size()));
+
+  // The URLs and titles of the restored entries are stored in two separate
+  // lists instead of a single list of objects to reduce the size of the JSON
+  // string to be included in the query parameter.
+  base::Value restored_urls(base::Value::Type::LIST);
+  base::Value restored_titles(base::Value::Type::LIST);
+  restored_urls.GetList().reserve(items.size());
+  restored_titles.GetList().reserve(items.size());
+  for (size_t index = 0; index < items.size(); index++) {
+    restored_urls.GetList().push_back(
+        base::Value(items[index]->GetURL().spec()));
+    restored_titles.GetList().push_back(base::Value(items[index]->GetTitle()));
+  }
+  base::Value session(base::Value::Type::DICTIONARY);
+  int offset = last_committed_item_index + 1 - items.size();
+  session.SetKey("offset", base::Value(offset));
+  session.SetKey("urls", std::move(restored_urls));
+  session.SetKey("titles", std::move(restored_titles));
+
+  std::string session_json;
+  base::JSONWriter::Write(session, &session_json);
+  return net::AppendQueryParameter(
+      GetRestoreSessionBaseUrl(), kRestoreSessionSessionQueryKey, session_json);
+}
+
+bool IsRestoreSessionUrl(const GURL& url) {
+  return url.SchemeIsFile() && url.path() == GetRestoreSessionBaseUrl().path();
+}
+
+bool ExtractTargetURL(const GURL& restore_session_url, GURL* target_url) {
+  DCHECK(IsRestoreSessionUrl(restore_session_url))
+      << restore_session_url.possibly_invalid_spec()
+      << " is not a restore session URL";
+  std::string target_url_spec;
+  bool success = net::GetValueForKeyInQuery(
+      restore_session_url, kRestoreSessionTargetUrlQueryKey, &target_url_spec);
+  if (success)
+    *target_url = GURL(target_url_spec);
+
+  return success;
+}
+
+}  // namespace web
diff --git a/ios/web/navigation/wk_based_restore_session_util_unittest.mm b/ios/web/navigation/wk_based_restore_session_util_unittest.mm
new file mode 100644
index 0000000..ebc6fd3
--- /dev/null
+++ b/ios/web/navigation/wk_based_restore_session_util_unittest.mm
@@ -0,0 +1,60 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ios/web/navigation/wk_based_restore_session_util.h"
+
+#include <memory>
+#include <vector>
+
+#include "base/strings/utf_string_conversions.h"
+#import "ios/web/navigation/navigation_item_impl.h"
+#include "net/base/url_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+
+namespace web {
+
+typedef PlatformTest WKBasedRestoreSessionUtilTest;
+
+TEST_F(WKBasedRestoreSessionUtilTest, CreateRestoreSessionUrl) {
+  auto item0 = std::make_unique<NavigationItemImpl>();
+  item0->SetURL(GURL("http://www.0.com"));
+  item0->SetTitle(base::ASCIIToUTF16("Test Website 0"));
+  auto item1 = std::make_unique<NavigationItemImpl>();
+  item1->SetURL(GURL("http://www.1.com"));
+
+  std::vector<std::unique_ptr<NavigationItem>> items;
+  items.push_back(std::move(item0));
+  items.push_back(std::move(item1));
+
+  GURL restore_session_url =
+      CreateRestoreSessionUrl(0 /* last_committed_item_index */, items);
+  ASSERT_TRUE(IsRestoreSessionUrl(restore_session_url));
+
+  std::string session_json;
+  net::GetValueForKeyInQuery(restore_session_url,
+                             kRestoreSessionSessionQueryKey, &session_json);
+  EXPECT_EQ(
+      "{\"offset\":-1,\"titles\":[\"Test Website 0\",\"\"],"
+      "\"urls\":[\"http://www.0.com/\",\"http://www.1.com/\"]}",
+      session_json);
+}
+
+TEST_F(WKBasedRestoreSessionUtilTest, IsNotRestoreSessionUrl) {
+  EXPECT_FALSE(IsRestoreSessionUrl(GURL()));
+  EXPECT_FALSE(IsRestoreSessionUrl(GURL("file://somefile")));
+  EXPECT_FALSE(IsRestoreSessionUrl(GURL("http://www.1.com")));
+}
+
+TEST_F(WKBasedRestoreSessionUtilTest, ExtractTargetURL) {
+  GURL target_url = GURL("http://www.1.com?query=special%26chars");
+  GURL url = net::AppendQueryParameter(GetRestoreSessionBaseUrl(),
+                                       kRestoreSessionTargetUrlQueryKey,
+                                       target_url.spec());
+  GURL extracted_url;
+  ASSERT_TRUE(ExtractTargetURL(url, &extracted_url));
+  EXPECT_EQ(target_url, extracted_url);
+}
+
+}  // namespace web
diff --git a/media/capture/video/video_capture_device_unittest.cc b/media/capture/video/video_capture_device_unittest.cc
index c9d9cf4..7ab13dcc 100644
--- a/media/capture/video/video_capture_device_unittest.cc
+++ b/media/capture/video/video_capture_device_unittest.cc
@@ -28,9 +28,11 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 #if defined(OS_WIN)
+#include <mfcaptureengine.h>
 #include "base/win/scoped_com_initializer.h"
 #include "base/win/windows_version.h"  // For fine-grained suppression.
 #include "media/capture/video/win/video_capture_device_factory_win.h"
+#include "media/capture/video/win/video_capture_device_mf_win.h"
 #endif
 
 #if defined(OS_MACOSX)
@@ -88,9 +90,16 @@
 #define MAYBE_GetPhotoState DISABLED_GetPhotoState
 #endif
 
+// Wrap the TEST_P macro into another one to allow to preprocess |test_name|
+// macros. Needed until https://github.com/google/googletest/issues/389 is
+// fixed.
+#define WRAPPED_TEST_P(test_case_name, test_name) \
+  TEST_P(test_case_name, test_name)
+
 using ::testing::_;
 using ::testing::Invoke;
 using ::testing::SaveArg;
+using ::testing::Return;
 
 namespace media {
 namespace {
@@ -116,6 +125,35 @@
 };
 #endif
 
+enum VideoCaptureImplementationTweak {
+  NONE,
+#if defined(OS_WIN)
+  WIN_MEDIA_FOUNDATION
+#endif
+};
+
+#if defined(OS_WIN)
+class MockMFPhotoCallback final : public IMFCaptureEngineOnSampleCallback {
+ public:
+  ~MockMFPhotoCallback() {}
+
+  MOCK_METHOD2(DoQueryInterface, HRESULT(REFIID, void**));
+  MOCK_METHOD0(DoAddRef, ULONG(void));
+  MOCK_METHOD0(DoRelease, ULONG(void));
+  MOCK_METHOD1(DoOnSample, HRESULT(IMFSample*));
+
+  STDMETHOD(QueryInterface)(REFIID riid, void** object) override {
+    return DoQueryInterface(riid, object);
+  }
+
+  STDMETHOD_(ULONG, AddRef)() override { return DoAddRef(); }
+
+  STDMETHOD_(ULONG, Release)() override { return DoRelease(); }
+
+  STDMETHOD(OnSample)(IMFSample* sample) override { return DoOnSample(sample); }
+};
+#endif
+
 class MockVideoCaptureClient : public VideoCaptureDevice::Client {
  public:
   MOCK_METHOD0(DoReserveOutputBuffer, void(void));
@@ -261,7 +299,19 @@
 
 }  // namespace
 
-class VideoCaptureDeviceTest : public testing::TestWithParam<gfx::Size> {
+class VideoCaptureDeviceTest
+    : public testing::TestWithParam<
+          std::tuple<gfx::Size, VideoCaptureImplementationTweak>> {
+ public:
+#if defined(OS_WIN)
+  scoped_refptr<IMFCaptureEngineOnSampleCallback> CreateMockPhotoCallback(
+      MockMFPhotoCallback* mock_photo_callback,
+      VideoCaptureDevice::TakePhotoCallback callback,
+      VideoCaptureFormat format) {
+    return scoped_refptr<IMFCaptureEngineOnSampleCallback>(mock_photo_callback);
+  }
+#endif
+
  protected:
   typedef VideoCaptureDevice::Client Client;
 
@@ -294,6 +344,10 @@
     static_cast<VideoCaptureDeviceFactoryAndroid*>(
         video_capture_device_factory_.get())
         ->ConfigureForTesting();
+#elif defined(OS_WIN)
+    static_cast<VideoCaptureDeviceFactoryWin*>(
+        video_capture_device_factory_.get())
+        ->set_use_media_foundation_for_testing(UseWinMediaFoundation());
 #endif
     EXPECT_CALL(*video_capture_client_, DoReserveOutputBuffer()).Times(0);
     EXPECT_CALL(*video_capture_client_, DoOnIncomingCapturedBuffer()).Times(0);
@@ -301,6 +355,12 @@
         .Times(0);
   }
 
+#if defined(OS_WIN)
+  bool UseWinMediaFoundation() {
+    return std::get<1>(GetParam()) == WIN_MEDIA_FOUNDATION;
+  }
+#endif
+
   void ResetWithNewClient() {
     video_capture_client_.reset(new MockVideoCaptureClient(base::Bind(
         &VideoCaptureDeviceTest::OnFrameCaptured, base::Unretained(this))));
@@ -407,7 +467,7 @@
 #define MAYBE_OpenInvalidDevice OpenInvalidDevice
 #endif
 // Tries to allocate an invalid device and verifies it doesn't work.
-TEST_F(VideoCaptureDeviceTest, MAYBE_OpenInvalidDevice) {
+WRAPPED_TEST_P(VideoCaptureDeviceTest, MAYBE_OpenInvalidDevice) {
   VideoCaptureDeviceDescriptor invalid_descriptor;
   invalid_descriptor.device_id = "jibberish";
   invalid_descriptor.display_name = "jibberish";
@@ -439,12 +499,12 @@
 }
 
 // Allocates the first enumerated device, and expects a frame.
-TEST_P(VideoCaptureDeviceTest, CaptureWithSize) {
+WRAPPED_TEST_P(VideoCaptureDeviceTest, CaptureWithSize) {
   const auto descriptor = FindUsableDeviceDescriptor();
   if (!descriptor)
     return;
 
-  const gfx::Size& size = GetParam();
+  const gfx::Size& size = std::get<0>(GetParam());
   if (!IsCaptureSizeSupported(*descriptor, size))
     return;
   const int width = size.width();
@@ -474,14 +534,22 @@
 }
 
 const gfx::Size kCaptureSizes[] = {gfx::Size(640, 480), gfx::Size(1280, 720)};
+const VideoCaptureImplementationTweak kCaptureImplementationTweaks[] = {
+    NONE,
+#if defined(OS_WIN)
+    WIN_MEDIA_FOUNDATION
+#endif
+};
 
-INSTANTIATE_TEST_CASE_P(VideoCaptureDeviceTests,
-                        VideoCaptureDeviceTest,
-                        testing::ValuesIn(kCaptureSizes));
+INSTANTIATE_TEST_CASE_P(
+    VideoCaptureDeviceTests,
+    VideoCaptureDeviceTest,
+    testing::Combine(testing::ValuesIn(kCaptureSizes),
+                     testing::ValuesIn(kCaptureImplementationTweaks)));
 
 // Allocates a device with an uncommon resolution and verifies frames are
 // captured in a close, much more typical one.
-TEST_F(VideoCaptureDeviceTest, MAYBE_AllocateBadSize) {
+WRAPPED_TEST_P(VideoCaptureDeviceTest, MAYBE_AllocateBadSize) {
   const auto descriptor = FindUsableDeviceDescriptor();
   if (!descriptor)
     return;
@@ -508,7 +576,7 @@
 }
 
 // Cause hangs on Windows, Linux. Fails Android. https://crbug.com/417824
-TEST_F(VideoCaptureDeviceTest, DISABLED_ReAllocateCamera) {
+WRAPPED_TEST_P(VideoCaptureDeviceTest, DISABLED_ReAllocateCamera) {
   const auto descriptor = FindUsableDeviceDescriptor();
   if (!descriptor)
     return;
@@ -552,7 +620,7 @@
 }
 
 // Starts the camera in 720p to try and capture MJPEG format.
-TEST_F(VideoCaptureDeviceTest, MAYBE_CaptureMjpeg) {
+WRAPPED_TEST_P(VideoCaptureDeviceTest, MAYBE_CaptureMjpeg) {
   std::unique_ptr<VideoCaptureDeviceDescriptor> device_descriptor =
       GetFirstDeviceDescriptorSupportingPixelFormat(PIXEL_FORMAT_MJPEG);
   if (!device_descriptor) {
@@ -589,7 +657,7 @@
   device->StopAndDeAllocate();
 }
 
-TEST_F(VideoCaptureDeviceTest, NoCameraSupportsPixelFormatMax) {
+WRAPPED_TEST_P(VideoCaptureDeviceTest, NoCameraSupportsPixelFormatMax) {
   // Use PIXEL_FORMAT_MAX to iterate all device names for testing
   // GetDeviceSupportedFormats().
   std::unique_ptr<VideoCaptureDeviceDescriptor> device_descriptor =
@@ -601,7 +669,7 @@
 
 // Starts the camera and verifies that a photo can be taken. The correctness of
 // the photo is enforced by MockImageCaptureClient.
-TEST_F(VideoCaptureDeviceTest, MAYBE_TakePhoto) {
+WRAPPED_TEST_P(VideoCaptureDeviceTest, MAYBE_TakePhoto) {
   const auto descriptor = FindUsableDeviceDescriptor();
   if (!descriptor)
     return;
@@ -650,7 +718,7 @@
 }
 
 // Starts the camera and verifies that the photo capabilities can be retrieved.
-TEST_F(VideoCaptureDeviceTest, MAYBE_GetPhotoState) {
+WRAPPED_TEST_P(VideoCaptureDeviceTest, MAYBE_GetPhotoState) {
   const auto descriptor = FindUsableDeviceDescriptor();
   if (!descriptor)
     return;
@@ -701,4 +769,64 @@
   device->StopAndDeAllocate();
 }
 
+#if defined(OS_WIN)
+// Verifies that the photo callback is correctly released by MediaFoundation
+WRAPPED_TEST_P(VideoCaptureDeviceTest, CheckPhotoCallbackRelease) {
+  if (!UseWinMediaFoundation())
+    return;
+
+  std::unique_ptr<VideoCaptureDeviceDescriptor> descriptor =
+      GetFirstDeviceDescriptorSupportingPixelFormat(PIXEL_FORMAT_MJPEG);
+  if (!descriptor) {
+    DVLOG(1) << "No usable media foundation device descriptor. Exiting test.";
+    return;
+  }
+
+  EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0);
+  EXPECT_CALL(*video_capture_client_, OnStarted());
+
+  std::unique_ptr<VideoCaptureDevice> device(
+      video_capture_device_factory_->CreateDevice(*descriptor));
+  ASSERT_TRUE(device);
+
+  VideoCaptureParams capture_params;
+  capture_params.requested_format.frame_size.SetSize(320, 240);
+  capture_params.requested_format.frame_rate = 30;
+  capture_params.requested_format.pixel_format = PIXEL_FORMAT_MJPEG;
+  device->AllocateAndStart(capture_params, std::move(video_capture_client_));
+
+  if (!static_cast<VideoCaptureDeviceMFWin*>(device.get())
+           ->get_use_photo_stream_to_take_photo_for_testing()) {
+    DVLOG(1) << "The device is not using the MediaFoundation photo callback. "
+                "Exiting test.";
+    device->StopAndDeAllocate();
+    return;
+  }
+
+  MockMFPhotoCallback* callback = new MockMFPhotoCallback();
+  EXPECT_CALL(*callback, DoQueryInterface(_, _)).WillRepeatedly(Return(S_OK));
+  EXPECT_CALL(*callback, DoAddRef()).WillOnce(Return(1U));
+  EXPECT_CALL(*callback, DoRelease()).WillOnce(Return(1U));
+  EXPECT_CALL(*callback, DoOnSample(_)).WillOnce(Return(S_OK));
+  static_cast<VideoCaptureDeviceMFWin*>(device.get())
+      ->set_create_mf_photo_callback_for_testing(
+          base::BindRepeating(&VideoCaptureDeviceTest::CreateMockPhotoCallback,
+                              base::Unretained(this), callback));
+
+  VideoCaptureDevice::TakePhotoCallback scoped_callback = base::BindOnce(
+      &MockImageCaptureClient::DoOnPhotoTaken, image_capture_client_);
+
+  base::RunLoop run_loop;
+  base::RepeatingClosure quit_closure =
+      BindToCurrentLoop(run_loop.QuitClosure());
+  EXPECT_CALL(*image_capture_client_.get(), OnCorrectPhotoTaken())
+      .WillOnce(RunClosure(quit_closure));
+
+  device->TakePhoto(std::move(scoped_callback));
+  run_loop.Run();
+
+  device->StopAndDeAllocate();
+}
+#endif
+
 };  // namespace media
diff --git a/media/capture/video/win/video_capture_device_factory_win.cc b/media/capture/video/win/video_capture_device_factory_win.cc
index fec2ed9..8f6168f 100644
--- a/media/capture/video/win/video_capture_device_factory_win.cc
+++ b/media/capture/video/win/video_capture_device_factory_win.cc
@@ -69,10 +69,9 @@
 
 static bool LoadMediaFoundationDlls() {
   static const wchar_t* const kMfDLLs[] = {
-      L"%WINDIR%\\system32\\mf.dll",
-      L"%WINDIR%\\system32\\mfplat.dll",
+      L"%WINDIR%\\system32\\mf.dll", L"%WINDIR%\\system32\\mfplat.dll",
       L"%WINDIR%\\system32\\mfreadwrite.dll",
-  };
+      L"%WINDIR%\\system32\\MFCaptureEngine.dll"};
 
   for (const wchar_t* kMfDLL : kMfDLLs) {
     wchar_t path[MAX_PATH] = {0};
@@ -86,8 +85,13 @@
 static bool PrepareVideoCaptureAttributesMediaFoundation(
     IMFAttributes** attributes,
     int count) {
-  if (!InitializeMediaFoundation())
+  // Once https://bugs.chromium.org/p/chromium/issues/detail?id=791615 is fixed,
+  // we must make sure that this method succeeds in capture_unittests context
+  // when MediaFoundation is enabled.
+  if (!VideoCaptureDeviceFactoryWin::PlatformSupportsMediaFoundation() ||
+      !InitializeMediaFoundation()) {
     return false;
+  }
 
   if (FAILED(MFCreateAttributes(attributes, count)))
     return false;
@@ -286,8 +290,9 @@
 
   DWORD stream_index = 0;
   ComPtr<IMFMediaType> type;
-  while (SUCCEEDED(reader->GetNativeMediaType(kFirstVideoStream, stream_index,
-                                              type.GetAddressOf()))) {
+  while (SUCCEEDED(hr = reader->GetNativeMediaType(
+                       static_cast<DWORD>(MF_SOURCE_READER_FIRST_VIDEO_STREAM),
+                       stream_index, type.GetAddressOf()))) {
     UINT32 width, height;
     hr = MFGetAttributeSize(type.Get(), MF_MT_FRAME_SIZE, &width, &height);
     if (FAILED(hr)) {
diff --git a/media/capture/video/win/video_capture_device_factory_win.h b/media/capture/video/win/video_capture_device_factory_win.h
index 9afcc64..a7d36783 100644
--- a/media/capture/video/win/video_capture_device_factory_win.h
+++ b/media/capture/video/win/video_capture_device_factory_win.h
@@ -30,10 +30,12 @@
       const VideoCaptureDeviceDescriptor& device_descriptor,
       VideoCaptureFormats* supported_formats) override;
 
+  void set_use_media_foundation_for_testing(bool use) {
+    use_media_foundation_ = use;
+  }
+
  private:
-  // Media Foundation is available in Win7 and later, use it if explicitly
-  // forced via flag, else use DirectShow.
-  const bool use_media_foundation_;
+  bool use_media_foundation_;
 
   DISALLOW_COPY_AND_ASSIGN(VideoCaptureDeviceFactoryWin);
 };
diff --git a/media/capture/video/win/video_capture_device_mf_win.cc b/media/capture/video/win/video_capture_device_mf_win.cc
index 73a144b..2161651 100644
--- a/media/capture/video/win/video_capture_device_mf_win.cc
+++ b/media/capture/video/win/video_capture_device_mf_win.cc
@@ -7,7 +7,9 @@
 #include <mfapi.h>
 #include <mferror.h>
 #include <stddef.h>
+#include <wincodec.h>
 
+#include <thread>
 #include <utility>
 
 #include "base/location.h"
@@ -17,14 +19,102 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/win/scoped_co_mem.h"
 #include "base/win/windows_version.h"
+#include "media/capture/video/blob_utils.h"
 #include "media/capture/video/win/capability_list_win.h"
 #include "media/capture/video/win/sink_filter_win.h"
 
 using base::win::ScopedCoMem;
+using Microsoft::WRL::ComPtr;
+using base::Location;
 
 namespace media {
 
-static bool GetFrameSize(IMFMediaType* type, gfx::Size* frame_size) {
+namespace {
+class MFPhotoCallback final
+    : public base::RefCountedThreadSafe<MFPhotoCallback>,
+      public IMFCaptureEngineOnSampleCallback {
+ public:
+  MFPhotoCallback(VideoCaptureDevice::TakePhotoCallback callback,
+                  VideoCaptureFormat format)
+      : callback_(std::move(callback)), format_(format) {}
+
+  STDMETHOD(QueryInterface)(REFIID riid, void** object) override {
+    if (riid == IID_IUnknown || riid == IID_IMFCaptureEngineOnSampleCallback) {
+      AddRef();
+      *object = static_cast<IMFCaptureEngineOnSampleCallback*>(this);
+      return S_OK;
+    }
+    return E_NOINTERFACE;
+  }
+
+  STDMETHOD_(ULONG, AddRef)() override {
+    base::RefCountedThreadSafe<MFPhotoCallback>::AddRef();
+    return 1U;
+  }
+
+  STDMETHOD_(ULONG, Release)() override {
+    base::RefCountedThreadSafe<MFPhotoCallback>::Release();
+    return 1U;
+  }
+
+  STDMETHOD(OnSample)(IMFSample* sample) override {
+    if (!sample)
+      return S_OK;
+
+    DWORD buffer_count = 0;
+    sample->GetBufferCount(&buffer_count);
+
+    for (DWORD i = 0; i < buffer_count; ++i) {
+      ComPtr<IMFMediaBuffer> buffer;
+      sample->GetBufferByIndex(i, buffer.GetAddressOf());
+      if (!buffer)
+        continue;
+
+      BYTE* data = nullptr;
+      DWORD max_length = 0;
+      DWORD length = 0;
+      buffer->Lock(&data, &max_length, &length);
+      mojom::BlobPtr blob = Blobify(data, length, format_);
+      buffer->Unlock();
+      if (blob) {
+        std::move(callback_).Run(std::move(blob));
+        // What is it supposed to mean if there is more than one buffer sent to
+        // us as a response to requesting a single still image? Are we supposed
+        // to somehow concatenate the buffers? Or is it safe to ignore extra
+        // buffers? For now, we ignore extra buffers.
+        break;
+      }
+    }
+    return S_OK;
+  }
+
+ private:
+  friend class base::RefCountedThreadSafe<MFPhotoCallback>;
+  ~MFPhotoCallback() = default;
+
+  VideoCaptureDevice::TakePhotoCallback callback_;
+  const VideoCaptureFormat format_;
+
+  DISALLOW_COPY_AND_ASSIGN(MFPhotoCallback);
+};
+
+scoped_refptr<IMFCaptureEngineOnSampleCallback> CreateMFPhotoCallback(
+    VideoCaptureDevice::TakePhotoCallback callback,
+    VideoCaptureFormat format) {
+  return scoped_refptr<IMFCaptureEngineOnSampleCallback>(
+      new MFPhotoCallback(std::move(callback), format));
+}
+}  // namespace
+
+void LogError(const Location& from_here, HRESULT hr) {
+#if !defined(NDEBUG)
+  DPLOG(ERROR) << from_here.ToString()
+               << " hr = " << logging::SystemErrorCodeToString(hr);
+#endif
+}
+
+static bool GetFrameSizeFromMediaType(IMFMediaType* type,
+                                      gfx::Size* frame_size) {
   UINT32 width32, height32;
   if (FAILED(MFGetAttributeSize(type, MF_MT_FRAME_SIZE, &width32, &height32)))
     return false;
@@ -32,7 +122,7 @@
   return true;
 }
 
-static bool GetFrameRate(IMFMediaType* type, float* frame_rate) {
+static bool GetFrameRateFromMediaType(IMFMediaType* type, float* frame_rate) {
   UINT32 numerator, denominator;
   if (FAILED(MFGetAttributeRatio(type, MF_MT_FRAME_RATE, &numerator,
                                  &denominator)) ||
@@ -43,12 +133,20 @@
   return true;
 }
 
-static bool FillFormat(IMFMediaType* type, VideoCaptureFormat* format) {
-  GUID type_guid;
-  if (FAILED(type->GetGUID(MF_MT_SUBTYPE, &type_guid)) ||
-      !GetFrameSize(type, &format->frame_size) ||
-      !GetFrameRate(type, &format->frame_rate) ||
-      !VideoCaptureDeviceMFWin::FormatFromGuid(type_guid,
+static bool GetFormatFromMediaType(IMFMediaType* type,
+                                   bool photo,
+                                   VideoCaptureFormat* format) {
+  GUID major_type_guid;
+  if (FAILED(type->GetGUID(MF_MT_MAJOR_TYPE, &major_type_guid)) ||
+      (major_type_guid != MFMediaType_Image &&
+       (photo || !GetFrameRateFromMediaType(type, &format->frame_rate)))) {
+    return false;
+  }
+
+  GUID sub_type_guid;
+  if (FAILED(type->GetGUID(MF_MT_SUBTYPE, &sub_type_guid)) ||
+      !GetFrameSizeFromMediaType(type, &format->frame_size) ||
+      !VideoCaptureDeviceMFWin::FormatFromGuid(sub_type_guid,
                                                &format->pixel_format)) {
     return false;
   }
@@ -56,60 +154,149 @@
   return true;
 }
 
-HRESULT FillCapabilities(IMFSourceReader* source,
-                         CapabilityList* capabilities) {
-  DWORD stream_index = 0;
-  Microsoft::WRL::ComPtr<IMFMediaType> type;
-  HRESULT hr;
-  while (SUCCEEDED(hr = source->GetNativeMediaType(
-                       kFirstVideoStream, stream_index, type.GetAddressOf()))) {
-    VideoCaptureFormat format;
-    if (FillFormat(type.Get(), &format))
-      capabilities->emplace_back(stream_index, format);
-    type.Reset();
-    ++stream_index;
-  }
+static HRESULT CopyAttribute(IMFAttributes* source_attributes,
+                             IMFAttributes* destination_attributes,
+                             const GUID& key) {
+  PROPVARIANT var;
+  PropVariantInit(&var);
+  HRESULT hr = source_attributes->GetItem(key, &var);
+  if (FAILED(hr))
+    return hr;
 
-  if (capabilities->empty() && (SUCCEEDED(hr) || hr == MF_E_NO_MORE_TYPES))
-    hr = HRESULT_FROM_WIN32(ERROR_EMPTY);
+  hr = destination_attributes->SetItem(key, var);
+  PropVariantClear(&var);
+  return hr;
+}
+
+static HRESULT ConvertToPhotoJpegMediaType(
+    IMFMediaType* source_media_type,
+    IMFMediaType* destination_media_type) {
+  HRESULT hr =
+      destination_media_type->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Image);
+  if (FAILED(hr))
+    return hr;
+
+  hr = destination_media_type->SetGUID(MF_MT_SUBTYPE, GUID_ContainerFormatJpeg);
+  if (FAILED(hr))
+    return hr;
+
+  return CopyAttribute(source_media_type, destination_media_type,
+                       MF_MT_FRAME_SIZE);
+}
+
+static const CapabilityWin& GetBestMatchedPhotoCapability(
+    ComPtr<IMFMediaType> current_media_type,
+    gfx::Size requested_size,
+    const CapabilityList& capabilities) {
+  gfx::Size current_size;
+  GetFrameSizeFromMediaType(current_media_type.Get(), &current_size);
+
+  int requested_height = requested_size.height() > 0 ? requested_size.height()
+                                                     : current_size.height();
+  int requested_width = requested_size.width() > 0 ? requested_size.width()
+                                                   : current_size.width();
+
+  const CapabilityWin* best_match = &(*capabilities.begin());
+  for (const CapabilityWin& capability : capabilities) {
+    int height = capability.supported_format.frame_size.height();
+    int width = capability.supported_format.frame_size.width();
+    int best_height = best_match->supported_format.frame_size.height();
+    int best_width = best_match->supported_format.frame_size.width();
+
+    if (std::abs(height - requested_height) <= std::abs(height - best_height) &&
+        std::abs(width - requested_width) <= std::abs(width - best_width)) {
+      best_match = &capability;
+    }
+  }
+  return *best_match;
+}
+
+HRESULT GetAvailableDeviceMediaType(IMFCaptureSource* source,
+                                    DWORD stream_index,
+                                    DWORD media_type_index,
+                                    IMFMediaType** type) {
+  HRESULT hr;
+  // Rarely, for some unknown reason, GetAvailableDeviceMediaType returns an
+  // undocumented MF_E_INVALIDREQUEST. Retrying solves the issue.
+  int retry_count = 0;
+  do {
+    hr = source->GetAvailableDeviceMediaType(stream_index, media_type_index,
+                                             type);
+    if (FAILED(hr))
+      base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50));
+
+    // Give up after ~10 seconds
+  } while (hr == MF_E_INVALIDREQUEST && retry_count++ < 200);
+
+  return hr;
+}
+
+HRESULT FillCapabilities(DWORD stream,
+                         IMFCaptureSource* source,
+                         bool photo,
+                         CapabilityList* capabilities) {
+  DWORD media_type_index = 0;
+  ComPtr<IMFMediaType> type;
+  HRESULT hr;
+
+  while (
+      SUCCEEDED(hr = GetAvailableDeviceMediaType(
+                    source, stream, media_type_index, type.GetAddressOf()))) {
+    VideoCaptureFormat format;
+    if (GetFormatFromMediaType(type.Get(), photo, &format))
+      capabilities->emplace_back(media_type_index, format);
+    type.Reset();
+    ++media_type_index;
+  }
 
   return (hr == MF_E_NO_MORE_TYPES) ? S_OK : hr;
 }
 
-class MFReaderCallback final
-    : public base::RefCountedThreadSafe<MFReaderCallback>,
-      public IMFSourceReaderCallback {
+class MFVideoCallback final
+    : public base::RefCountedThreadSafe<MFVideoCallback>,
+      public IMFCaptureEngineOnSampleCallback,
+      public IMFCaptureEngineOnEventCallback {
  public:
-  MFReaderCallback(VideoCaptureDeviceMFWin* observer)
-      : observer_(observer), wait_event_(NULL) {}
-
-  void SetSignalOnFlush(base::WaitableEvent* event) { wait_event_ = event; }
+  MFVideoCallback(VideoCaptureDeviceMFWin* observer) : observer_(observer) {}
 
   STDMETHOD(QueryInterface)(REFIID riid, void** object) override {
-    if (riid != IID_IUnknown && riid != IID_IMFSourceReaderCallback)
-      return E_NOINTERFACE;
-    *object = static_cast<IMFSourceReaderCallback*>(this);
-    AddRef();
-    return S_OK;
+    HRESULT hr = E_NOINTERFACE;
+    if (riid == IID_IUnknown) {
+      *object = this;
+      hr = S_OK;
+    } else if (riid == IID_IMFCaptureEngineOnSampleCallback) {
+      *object = static_cast<IMFCaptureEngineOnSampleCallback*>(this);
+      hr = S_OK;
+    } else if (riid == IID_IMFCaptureEngineOnEventCallback) {
+      *object = static_cast<IMFCaptureEngineOnEventCallback*>(this);
+      hr = S_OK;
+    }
+    if (SUCCEEDED(hr))
+      AddRef();
+
+    return hr;
   }
 
   STDMETHOD_(ULONG, AddRef)() override {
-    base::RefCountedThreadSafe<MFReaderCallback>::AddRef();
+    base::RefCountedThreadSafe<MFVideoCallback>::AddRef();
     return 1U;
   }
 
   STDMETHOD_(ULONG, Release)() override {
-    base::RefCountedThreadSafe<MFReaderCallback>::Release();
+    base::RefCountedThreadSafe<MFVideoCallback>::Release();
     return 1U;
   }
 
-  STDMETHOD(OnReadSample)
-  (HRESULT status,
-   DWORD stream_index,
-   DWORD stream_flags,
-   LONGLONG raw_time_stamp,
-   IMFSample* sample) override {
+  STDMETHOD(OnEvent)(IMFMediaEvent* media_event) override {
+    observer_->OnEvent(media_event);
+    return S_OK;
+  }
+
+  STDMETHOD(OnSample)(IMFSample* sample) override {
     base::TimeTicks reference_time(base::TimeTicks::Now());
+
+    LONGLONG raw_time_stamp = 0;
+    sample->GetSampleTime(&raw_time_stamp);
     base::TimeDelta timestamp =
         base::TimeDelta::FromMicroseconds(raw_time_stamp / 10);
     if (!sample) {
@@ -121,9 +308,9 @@
     sample->GetBufferCount(&count);
 
     for (DWORD i = 0; i < count; ++i) {
-      Microsoft::WRL::ComPtr<IMFMediaBuffer> buffer;
+      ComPtr<IMFMediaBuffer> buffer;
       sample->GetBufferByIndex(i, buffer.GetAddressOf());
-      if (buffer.Get()) {
+      if (buffer) {
         DWORD length = 0, max_length = 0;
         BYTE* data = NULL;
         buffer->Lock(&data, &max_length, &length);
@@ -135,25 +322,10 @@
     return S_OK;
   }
 
-  STDMETHOD(OnFlush)(DWORD stream_index) override {
-    if (wait_event_) {
-      wait_event_->Signal();
-      wait_event_ = NULL;
-    }
-    return S_OK;
-  }
-
-  STDMETHOD(OnEvent)(DWORD stream_index, IMFMediaEvent* event) override {
-    NOTIMPLEMENTED();
-    return S_OK;
-  }
-
  private:
-  friend class base::RefCountedThreadSafe<MFReaderCallback>;
-  ~MFReaderCallback() {}
-
+  friend class base::RefCountedThreadSafe<MFVideoCallback>;
+  ~MFVideoCallback() {}
   VideoCaptureDeviceMFWin* observer_;
-  base::WaitableEvent* wait_event_;
 };
 
 // static
@@ -169,6 +341,7 @@
       {MFVideoFormat_RGB24, PIXEL_FORMAT_RGB24},
       {MFVideoFormat_ARGB32, PIXEL_FORMAT_ARGB},
       {MFVideoFormat_MJPG, PIXEL_FORMAT_MJPEG},
+      {GUID_ContainerFormatJpeg, PIXEL_FORMAT_MJPEG},
       {MFVideoFormat_YV12, PIXEL_FORMAT_YV12},
       {kMediaSubTypeY16, PIXEL_FORMAT_Y16},
       {kMediaSubTypeZ16, PIXEL_FORMAT_Y16},
@@ -187,7 +360,14 @@
 
 VideoCaptureDeviceMFWin::VideoCaptureDeviceMFWin(
     const VideoCaptureDeviceDescriptor& device_descriptor)
-    : descriptor_(device_descriptor), capture_(0) {
+    : descriptor_(device_descriptor),
+      create_mf_photo_callback_(base::BindRepeating(&CreateMFPhotoCallback)),
+      is_started_(false),
+      video_stream_index_(static_cast<DWORD>(
+          MF_CAPTURE_ENGINE_PREFERRED_SOURCE_STREAM_FOR_VIDEO_PREVIEW)),
+      photo_stream_index_(static_cast<DWORD>(
+          MF_CAPTURE_ENGINE_PREFERRED_SOURCE_STREAM_FOR_PHOTO)),
+      use_photo_stream_to_take_photo_(false) {
   DETACH_FROM_SEQUENCE(sequence_checker_);
 }
 
@@ -195,20 +375,44 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
-bool VideoCaptureDeviceMFWin::Init(
-    const Microsoft::WRL::ComPtr<IMFMediaSource>& source) {
+bool VideoCaptureDeviceMFWin::Init(const ComPtr<IMFMediaSource>& source) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(!reader_.Get());
+  DCHECK(!engine_);
 
-  Microsoft::WRL::ComPtr<IMFAttributes> attributes;
+  HRESULT hr = S_OK;
+  ComPtr<IMFAttributes> attributes;
+  ComPtr<IMFCaptureEngineClassFactory> capture_engine_class_factory;
   MFCreateAttributes(attributes.GetAddressOf(), 1);
-  DCHECK(attributes.Get());
+  DCHECK(attributes);
 
-  callback_ = new MFReaderCallback(this);
-  attributes->SetUnknown(MF_SOURCE_READER_ASYNC_CALLBACK, callback_.get());
+  hr = CoCreateInstance(
+      CLSID_MFCaptureEngineClassFactory, NULL, CLSCTX_INPROC_SERVER,
+      IID_PPV_ARGS(capture_engine_class_factory.GetAddressOf()));
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return false;
+  }
+  hr = capture_engine_class_factory->CreateInstance(
+      CLSID_MFCaptureEngine, IID_PPV_ARGS(engine_.GetAddressOf()));
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return false;
+  }
 
-  return SUCCEEDED(MFCreateSourceReaderFromMediaSource(
-      source.Get(), attributes.Get(), reader_.GetAddressOf()));
+  video_callback_ = new MFVideoCallback(this);
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return false;
+  }
+
+  hr = engine_->Initialize(video_callback_.get(), attributes.Get(), nullptr,
+                           source.Get());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return false;
+  }
+
+  return true;
 }
 
 void VideoCaptureDeviceMFWin::AllocateAndStart(
@@ -219,65 +423,350 @@
   base::AutoLock lock(lock_);
 
   client_ = std::move(client);
-  DCHECK_EQ(capture_, false);
+  DCHECK_EQ(false, is_started_);
 
-  CapabilityList capabilities;
-  HRESULT hr = S_OK;
-  if (reader_.Get()) {
-    hr = FillCapabilities(reader_.Get(), &capabilities);
-    if (SUCCEEDED(hr)) {
-      const CapabilityWin found_capability =
-          GetBestMatchedCapability(params.requested_format, capabilities);
-      Microsoft::WRL::ComPtr<IMFMediaType> type;
-      hr = reader_->GetNativeMediaType(kFirstVideoStream,
-                                       found_capability.stream_index,
-                                       type.GetAddressOf());
-      if (SUCCEEDED(hr)) {
-        hr = reader_->SetCurrentMediaType(kFirstVideoStream, NULL, type.Get());
-        if (SUCCEEDED(hr)) {
-          hr =
-              reader_->ReadSample(kFirstVideoStream, 0, NULL, NULL, NULL, NULL);
-          if (SUCCEEDED(hr)) {
-            capture_format_ = found_capability.supported_format;
-            client_->OnStarted();
-            capture_ = true;
-            return;
-          }
-        }
-      }
-    }
+  if (!engine_) {
+    OnError(FROM_HERE, E_FAIL);
+    return;
   }
 
-  OnError(FROM_HERE, hr);
+  ComPtr<IMFCaptureSource> source;
+  HRESULT hr = engine_->GetSource(source.GetAddressOf());
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  DWORD stream_count = 0;
+  source->GetDeviceStreamCount(&stream_count);
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  // In some situations, stream 0 is the only one. (i.e. Logitech HD Pro Webcam
+  // C920 on Windows 2012 R2)
+  if (stream_count < 2) {
+    video_stream_index_ = 0;
+    photo_stream_index_ = 0;
+  }
+
+  CapabilityList photo_capabilities;
+  hr = FillCapabilities(photo_stream_index_, source.Get(), true,
+                        &photo_capabilities);
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+  use_photo_stream_to_take_photo_ = !photo_capabilities.empty();
+
+  CapabilityList video_capabilities;
+  hr = FillCapabilities(video_stream_index_, source.Get(), false,
+                        &video_capabilities);
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  const CapabilityWin found_capability =
+      GetBestMatchedCapability(params.requested_format, video_capabilities);
+  ComPtr<IMFMediaType> type;
+  hr = GetAvailableDeviceMediaType(source.Get(), video_stream_index_,
+                                   found_capability.stream_index,
+                                   type.GetAddressOf());
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  hr = source->SetCurrentDeviceMediaType(video_stream_index_, type.Get());
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  ComPtr<IMFCaptureSink> sink;
+  hr = engine_->GetSink(MF_CAPTURE_ENGINE_SINK_TYPE_PREVIEW,
+                        sink.GetAddressOf());
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  ComPtr<IMFCapturePreviewSink> preview_sink;
+  hr = sink->QueryInterface(IID_PPV_ARGS(preview_sink.GetAddressOf()));
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  hr = preview_sink->RemoveAllStreams();
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  DWORD dw_sink_stream_index = 0;
+  hr = preview_sink->AddStream(video_stream_index_, type.Get(), NULL,
+                               &dw_sink_stream_index);
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  hr = preview_sink->SetSampleCallback(dw_sink_stream_index,
+                                       video_callback_.get());
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  hr = engine_->StartPreview();
+  if (FAILED(hr)) {
+    OnError(FROM_HERE, hr);
+    return;
+  }
+
+  capture_video_format_ = found_capability.supported_format;
+  client_->OnStarted();
+  is_started_ = true;
 }
 
 void VideoCaptureDeviceMFWin::StopAndDeAllocate() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  base::WaitableEvent flushed(base::WaitableEvent::ResetPolicy::AUTOMATIC,
-                              base::WaitableEvent::InitialState::NOT_SIGNALED);
-  const int kFlushTimeOutInMs = 1000;
-  bool wait = false;
-  {
-    base::AutoLock lock(lock_);
-    if (capture_) {
-      capture_ = false;
-      callback_->SetSignalOnFlush(&flushed);
-      wait = SUCCEEDED(
-          reader_->Flush(static_cast<DWORD>(MF_SOURCE_READER_ALL_STREAMS)));
-      if (!wait) {
-        callback_->SetSignalOnFlush(NULL);
-      }
-    }
-    client_.reset();
+  base::AutoLock lock(lock_);
+
+  if (is_started_ && engine_)
+    engine_->StopPreview();
+  is_started_ = false;
+
+  client_.reset();
+}
+
+void VideoCaptureDeviceMFWin::TakePhoto(TakePhotoCallback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  base::AutoLock lock(lock_);
+
+  if (!is_started_)
+    return;
+
+  if (!use_photo_stream_to_take_photo_) {
+    video_stream_take_photo_callbacks_.push(std::move(callback));
+    return;
   }
 
-  // If the device has been unplugged, the Flush() won't trigger the event
-  // and a timeout will happen.
-  // TODO(tommi): Hook up the IMFMediaEventGenerator notifications API and
-  // do not wait at all after getting MEVideoCaptureDeviceRemoved event.
-  // See issue/226396.
-  if (wait)
-    flushed.TimedWait(base::TimeDelta::FromMilliseconds(kFlushTimeOutInMs));
+  ComPtr<IMFCaptureSource> source;
+  HRESULT hr = engine_->GetSource(source.GetAddressOf());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  ComPtr<IMFMediaType> current_media_type;
+  hr = source->GetCurrentDeviceMediaType(photo_stream_index_,
+                                         current_media_type.GetAddressOf());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  ComPtr<IMFMediaType> photo_media_type;
+  hr = MFCreateMediaType(photo_media_type.GetAddressOf());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  hr = ConvertToPhotoJpegMediaType(current_media_type.Get(),
+                                   photo_media_type.Get());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  hr = source->SetCurrentDeviceMediaType(photo_stream_index_,
+                                         photo_media_type.Get());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  VideoCaptureFormat format;
+  hr = GetFormatFromMediaType(photo_media_type.Get(), true, &format) ? S_OK
+                                                                     : E_FAIL;
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  ComPtr<IMFCaptureSink> sink;
+  hr = engine_->GetSink(MF_CAPTURE_ENGINE_SINK_TYPE_PHOTO, sink.GetAddressOf());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  ComPtr<IMFCapturePhotoSink> photo_sink;
+  hr = sink->QueryInterface(IID_PPV_ARGS(photo_sink.GetAddressOf()));
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  hr = photo_sink->RemoveAllStreams();
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  DWORD dw_sink_stream_index = 0;
+  hr = photo_sink->AddStream(photo_stream_index_, photo_media_type.Get(), NULL,
+                             &dw_sink_stream_index);
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  scoped_refptr<IMFCaptureEngineOnSampleCallback> photo_callback =
+      create_mf_photo_callback_.Run(std::move(callback), format);
+  hr = photo_sink->SetSampleCallback(photo_callback.get());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  hr = engine_->TakePhoto();
+  if (FAILED(hr))
+    LogError(FROM_HERE, hr);
+}
+
+void VideoCaptureDeviceMFWin::GetPhotoState(GetPhotoStateCallback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (!is_started_)
+    return;
+
+  ComPtr<IMFCaptureSource> source;
+  HRESULT hr = engine_->GetSource(source.GetAddressOf());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  CapabilityList capabilities;
+  if (use_photo_stream_to_take_photo_)
+    hr = FillCapabilities(photo_stream_index_, source.Get(), true,
+                          &capabilities);
+
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  ComPtr<IMFMediaType> current_media_type;
+  hr = source->GetCurrentDeviceMediaType(use_photo_stream_to_take_photo_
+                                             ? photo_stream_index_
+                                             : video_stream_index_,
+                                         current_media_type.GetAddressOf());
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  auto photo_capabilities = mojom::PhotoState::New();
+  gfx::Size current_size;
+  GetFrameSizeFromMediaType(current_media_type.Get(), &current_size);
+
+  gfx::Size min_size = gfx::Size(current_size.width(), current_size.height());
+  gfx::Size max_size = gfx::Size(current_size.width(), current_size.height());
+  for (const CapabilityWin& capability : capabilities) {
+    min_size.SetToMin(capability.supported_format.frame_size);
+    max_size.SetToMax(capability.supported_format.frame_size);
+  }
+
+  photo_capabilities->height = mojom::Range::New(
+      max_size.height(), min_size.height(), current_size.height(), 1);
+  photo_capabilities->width = mojom::Range::New(
+      max_size.width(), min_size.width(), current_size.width(), 1);
+
+  photo_capabilities->exposure_compensation = mojom::Range::New();
+  photo_capabilities->color_temperature = mojom::Range::New();
+  photo_capabilities->iso = mojom::Range::New();
+  photo_capabilities->brightness = mojom::Range::New();
+  photo_capabilities->contrast = mojom::Range::New();
+  photo_capabilities->saturation = mojom::Range::New();
+  photo_capabilities->sharpness = mojom::Range::New();
+  photo_capabilities->zoom = mojom::Range::New();
+  photo_capabilities->red_eye_reduction = mojom::RedEyeReduction::NEVER;
+
+  photo_capabilities->torch = false;
+  std::move(callback).Run(std::move(photo_capabilities));
+}
+
+void VideoCaptureDeviceMFWin::SetPhotoOptions(
+    mojom::PhotoSettingsPtr settings,
+    SetPhotoOptionsCallback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (!is_started_)
+    return;
+
+  HRESULT hr = S_OK;
+  ComPtr<IMFCaptureSource> source;
+  hr = engine_->GetSource(source.GetAddressOf());
+
+  if (FAILED(hr)) {
+    LogError(FROM_HERE, hr);
+    return;
+  }
+
+  if (use_photo_stream_to_take_photo_ &&
+      (settings->has_height || settings->has_width)) {
+    CapabilityList capabilities;
+    hr = FillCapabilities(photo_stream_index_, source.Get(), true,
+                          &capabilities);
+
+    if (FAILED(hr)) {
+      LogError(FROM_HERE, hr);
+      return;
+    }
+
+    ComPtr<IMFMediaType> current_media_type;
+    hr = source->GetCurrentDeviceMediaType(photo_stream_index_,
+                                           current_media_type.GetAddressOf());
+
+    if (FAILED(hr)) {
+      LogError(FROM_HERE, hr);
+      return;
+    }
+
+    gfx::Size requested_size = gfx::Size();
+    if (settings->has_height)
+      requested_size.set_height(settings->height);
+
+    if (settings->has_width)
+      requested_size.set_width(settings->width);
+
+    const CapabilityWin best_match = GetBestMatchedPhotoCapability(
+        current_media_type, requested_size, capabilities);
+
+    ComPtr<IMFMediaType> type;
+    hr = GetAvailableDeviceMediaType(source.Get(), photo_stream_index_,
+                                     best_match.stream_index,
+                                     type.GetAddressOf());
+    if (FAILED(hr)) {
+      LogError(FROM_HERE, hr);
+      return;
+    }
+
+    hr = source->SetCurrentDeviceMediaType(photo_stream_index_, type.Get());
+    if (FAILED(hr)) {
+      LogError(FROM_HERE, hr);
+      return;
+    }
+  }
+
+  std::move(callback).Run(true);
 }
 
 void VideoCaptureDeviceMFWin::OnIncomingCapturedData(
@@ -287,27 +776,42 @@
     base::TimeTicks reference_time,
     base::TimeDelta timestamp) {
   base::AutoLock lock(lock_);
-  if (data && client_.get()) {
-    client_->OnIncomingCapturedData(data, length, capture_format_, rotation,
-                                    reference_time, timestamp);
+
+  if (!data)
+    return;
+
+  if (client_.get()) {
+    client_->OnIncomingCapturedData(data, length, capture_video_format_,
+                                    rotation, reference_time, timestamp);
   }
 
-  if (capture_) {
-    HRESULT hr =
-        reader_->ReadSample(kFirstVideoStream, 0, NULL, NULL, NULL, NULL);
-    if (FAILED(hr)) {
-      // If running the *VideoCap* unit tests on repeat, this can sometimes
-      // fail with HRESULT_FROM_WINHRESULT_FROM_WIN32(ERROR_INVALID_FUNCTION).
-      // It's not clear to me why this is, but it is possible that it has
-      // something to do with this bug:
-      // http://support.microsoft.com/kb/979567
-      OnError(FROM_HERE, hr);
-    }
+  while (!video_stream_take_photo_callbacks_.empty()) {
+    TakePhotoCallback cb =
+        std::move(video_stream_take_photo_callbacks_.front());
+    video_stream_take_photo_callbacks_.pop();
+
+    mojom::BlobPtr blob = Blobify(data, length, capture_video_format_);
+    if (!blob)
+      continue;
+
+    std::move(cb).Run(std::move(blob));
   }
 }
 
-void VideoCaptureDeviceMFWin::OnError(const base::Location& from_here,
-                                      HRESULT hr) {
+void VideoCaptureDeviceMFWin::OnEvent(IMFMediaEvent* media_event) {
+  base::AutoLock lock(lock_);
+
+  GUID event_type;
+  HRESULT hr = media_event->GetExtendedType(&event_type);
+
+  if (SUCCEEDED(hr) && event_type == MF_CAPTURE_ENGINE_ERROR)
+    media_event->GetStatus(&hr);
+
+  if (FAILED(hr))
+    OnError(FROM_HERE, hr);
+}
+
+void VideoCaptureDeviceMFWin::OnError(const Location& from_here, HRESULT hr) {
   if (client_.get()) {
     client_->OnError(
         from_here,
@@ -316,4 +820,4 @@
   }
 }
 
-}  // namespace media
+}  // namespace media
\ No newline at end of file
diff --git a/media/capture/video/win/video_capture_device_mf_win.h b/media/capture/video/win/video_capture_device_mf_win.h
index 93534f9..72b5b74b 100644
--- a/media/capture/video/win/video_capture_device_mf_win.h
+++ b/media/capture/video/win/video_capture_device_mf_win.h
@@ -3,12 +3,13 @@
 // found in the LICENSE file.
 
 // Windows specific implementation of VideoCaptureDevice.
-// DirectShow is used for capturing. DirectShow provide its own threads
-// for capturing.
+// MediaFoundation is used for capturing. MediaFoundation provides its own
+// threads for capturing.
 
 #ifndef MEDIA_CAPTURE_VIDEO_WIN_VIDEO_CAPTURE_DEVICE_MF_WIN_H_
 #define MEDIA_CAPTURE_VIDEO_WIN_VIDEO_CAPTURE_DEVICE_MF_WIN_H_
 
+#include <mfcaptureengine.h>
 #include <mfidl.h>
 #include <mfreadwrite.h>
 #include <stdint.h>
@@ -16,9 +17,9 @@
 
 #include <vector>
 
+#include "base/callback_forward.h"
 #include "base/macros.h"
 #include "base/sequence_checker.h"
-#include "base/synchronization/lock.h"
 #include "media/capture/capture_export.h"
 #include "media/capture/video/video_capture_device.h"
 
@@ -30,10 +31,7 @@
 
 namespace media {
 
-class MFReaderCallback;
-
-const DWORD kFirstVideoStream =
-    static_cast<DWORD>(MF_SOURCE_READER_FIRST_VIDEO_STREAM);
+class MFVideoCallback;
 
 class CAPTURE_EXPORT VideoCaptureDeviceMFWin : public VideoCaptureDevice {
  public:
@@ -51,6 +49,10 @@
       const VideoCaptureParams& params,
       std::unique_ptr<VideoCaptureDevice::Client> client) override;
   void StopAndDeAllocate() override;
+  void TakePhoto(TakePhotoCallback callback) override;
+  void GetPhotoState(GetPhotoStateCallback callback) override;
+  void SetPhotoOptions(mojom::PhotoSettingsPtr settings,
+                       SetPhotoOptionsCallback callback) override;
 
   // Captured new video data.
   void OnIncomingCapturedData(const uint8_t* data,
@@ -58,19 +60,41 @@
                               int rotation,
                               base::TimeTicks reference_time,
                               base::TimeDelta timestamp);
+  void OnEvent(IMFMediaEvent* media_event);
+
+  using CreateMFPhotoCallbackCB =
+      base::RepeatingCallback<scoped_refptr<IMFCaptureEngineOnSampleCallback>(
+          VideoCaptureDevice::TakePhotoCallback callback,
+          VideoCaptureFormat format)>;
+
+  bool get_use_photo_stream_to_take_photo_for_testing() {
+    return use_photo_stream_to_take_photo_;
+  }
+
+  void set_create_mf_photo_callback_for_testing(CreateMFPhotoCallbackCB cb) {
+    create_mf_photo_callback_ = cb;
+  }
 
  private:
   void OnError(const base::Location& from_here, HRESULT hr);
 
   VideoCaptureDeviceDescriptor descriptor_;
-  Microsoft::WRL::ComPtr<IMFActivate> device_;
-  scoped_refptr<MFReaderCallback> callback_;
+  CreateMFPhotoCallbackCB create_mf_photo_callback_;
+  scoped_refptr<MFVideoCallback> video_callback_;
 
-  base::Lock lock_;  // Used to guard the below variables.
+  // Guards the below variables from concurrent access between methods running
+  // on |sequence_checker_| and calls to OnIncomingCapturedData() and OnEvent()
+  // made by MediaFoundation on threads outside of our control.
+  base::Lock lock_;
+
   std::unique_ptr<VideoCaptureDevice::Client> client_;
-  Microsoft::WRL::ComPtr<IMFSourceReader> reader_;
-  VideoCaptureFormat capture_format_;
-  bool capture_;
+  Microsoft::WRL::ComPtr<IMFCaptureEngine> engine_;
+  VideoCaptureFormat capture_video_format_;
+  bool is_started_;
+  DWORD video_stream_index_;
+  DWORD photo_stream_index_;
+  bool use_photo_stream_to_take_photo_;
+  base::queue<TakePhotoCallback> video_stream_take_photo_callbacks_;
 
   SEQUENCE_CHECKER(sequence_checker_);
 
diff --git a/media/gpu/dxva_video_decode_accelerator_win.cc b/media/gpu/dxva_video_decode_accelerator_win.cc
index bbc143f..10a7388d 100644
--- a/media/gpu/dxva_video_decode_accelerator_win.cc
+++ b/media/gpu/dxva_video_decode_accelerator_win.cc
@@ -690,7 +690,7 @@
   }
 
   RETURN_AND_NOTIFY_ON_FAILURE(
-      gl::g_driver_egl->ext.b_EGL_ANGLE_surface_d3d_texture_2d_share_handle,
+      gl::g_driver_egl.ext.b_EGL_ANGLE_surface_d3d_texture_2d_share_handle,
       "EGL_ANGLE_surface_d3d_texture_2d_share_handle unavailable",
       PLATFORM_FAILURE, false);
 
@@ -1741,10 +1741,10 @@
       use_dx11_ && gl::GLSurfaceEGL::HasEGLExtension("EGL_ANGLE_keyed_mutex");
 
   if (!use_dx11_ ||
-      !gl::g_driver_egl->ext.b_EGL_ANGLE_stream_producer_d3d_texture ||
-      !gl::g_driver_egl->ext.b_EGL_KHR_stream ||
-      !gl::g_driver_egl->ext.b_EGL_KHR_stream_consumer_gltexture ||
-      !gl::g_driver_egl->ext.b_EGL_NV_stream_consumer_gltexture_yuv) {
+      !gl::g_driver_egl.ext.b_EGL_ANGLE_stream_producer_d3d_texture ||
+      !gl::g_driver_egl.ext.b_EGL_KHR_stream ||
+      !gl::g_driver_egl.ext.b_EGL_KHR_stream_consumer_gltexture ||
+      !gl::g_driver_egl.ext.b_EGL_NV_stream_consumer_gltexture_yuv) {
     support_share_nv12_textures_ = false;
     support_copy_nv12_textures_ = false;
   }
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
index f6cd336c..ca08a99 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
@@ -561,7 +561,7 @@
       return false;
     }
 
-    if (!gl::g_driver_egl->ext.b_EGL_KHR_fence_sync) {
+    if (!gl::g_driver_egl.ext.b_EGL_KHR_fence_sync) {
       VLOGF(1) << "context does not have EGL_KHR_fence_sync";
       return false;
     }
diff --git a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
index a561028..63a3d54 100644
--- a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
@@ -237,7 +237,7 @@
 
 // TODO(posciak): https://crbug.com/450898.
 #if defined(ARCH_CPU_ARMEL)
-    if (!gl::g_driver_egl->ext.b_EGL_KHR_fence_sync) {
+    if (!gl::g_driver_egl.ext.b_EGL_KHR_fence_sync) {
       LOGF(ERROR) << "context does not have EGL_KHR_fence_sync";
       return false;
     }
diff --git a/net/network_error_logging/network_error_logging_service.cc b/net/network_error_logging/network_error_logging_service.cc
index f5ccd0d..e0125fe2 100644
--- a/net/network_error_logging/network_error_logging_service.cc
+++ b/net/network_error_logging/network_error_logging_service.cc
@@ -171,12 +171,6 @@
   if (!reporting_service_)
     return;
 
-  // It is expected for Reporting uploads to terminate with ERR_ABORTED, since
-  // the ReportingUploader cancels them after receiving the response code and
-  // headers.
-  if (details.is_reporting_upload && details.type == ERR_ABORTED)
-    return;
-
   url::Origin origin = url::Origin::Create(details.uri);
 
   // NEL is only available to secure origins, so ignore network errors from
diff --git a/net/network_error_logging/network_error_logging_service_unittest.cc b/net/network_error_logging/network_error_logging_service_unittest.cc
index 246a831..b0c7a63 100644
--- a/net/network_error_logging/network_error_logging_service_unittest.cc
+++ b/net/network_error_logging/network_error_logging_service_unittest.cc
@@ -80,11 +80,6 @@
     NOTREACHED();
   }
 
-  bool RequestIsUpload(const URLRequest& request) override {
-    NOTREACHED();
-    return true;
-  }
-
  private:
   std::vector<Report> reports_;
 
diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_service.cc
index 4de9d44..b9ef140 100644
--- a/net/reporting/reporting_service.cc
+++ b/net/reporting/reporting_service.cc
@@ -16,7 +16,6 @@
 #include "net/reporting/reporting_context.h"
 #include "net/reporting/reporting_delegate.h"
 #include "net/reporting/reporting_header_parser.h"
-#include "net/reporting/reporting_uploader.h"
 #include "url/gurl.h"
 
 namespace net {
@@ -28,8 +27,6 @@
   ReportingServiceImpl(std::unique_ptr<ReportingContext> context)
       : context_(std::move(context)) {}
 
-  // ReportingService implementation:
-
   ~ReportingServiceImpl() override = default;
 
   void QueueReport(const GURL& url,
@@ -55,10 +52,6 @@
         context_->cache(), data_type_mask, origin_filter);
   }
 
-  bool RequestIsUpload(const URLRequest& request) override {
-    return context_->uploader()->RequestIsUpload(request);
-  }
-
  private:
   std::unique_ptr<ReportingContext> context_;
 
diff --git a/net/reporting/reporting_service.h b/net/reporting/reporting_service.h
index 71f775a..33cfb04 100644
--- a/net/reporting/reporting_service.h
+++ b/net/reporting/reporting_service.h
@@ -22,7 +22,6 @@
 
 class ReportingContext;
 struct ReportingPolicy;
-class URLRequest;
 class URLRequestContext;
 
 // The external interface to the Reporting system, used by the embedder of //net
@@ -66,10 +65,6 @@
       int data_type_mask,
       base::RepeatingCallback<bool(const GURL&)> origin_filter) = 0;
 
-  // Checks whether |request| is a Reporting upload, to avoid loops of reporting
-  // about report uploads.
-  virtual bool RequestIsUpload(const URLRequest& request) = 0;
-
  protected:
   ReportingService() {}
 
diff --git a/net/reporting/reporting_test_util.cc b/net/reporting/reporting_test_util.cc
index 17671b21a..1425069 100644
--- a/net/reporting/reporting_test_util.cc
+++ b/net/reporting/reporting_test_util.cc
@@ -105,11 +105,6 @@
       base::BindOnce(&ErasePendingUpload, &pending_uploads_)));
 }
 
-bool TestReportingUploader::RequestIsUpload(const URLRequest& request) {
-  NOTIMPLEMENTED();
-  return true;
-}
-
 TestReportingDelegate::TestReportingDelegate() = default;
 
 TestReportingDelegate::~TestReportingDelegate() = default;
diff --git a/net/reporting/reporting_test_util.h b/net/reporting/reporting_test_util.h
index f2dff8f..35216c0 100644
--- a/net/reporting/reporting_test_util.h
+++ b/net/reporting/reporting_test_util.h
@@ -68,13 +68,10 @@
   }
 
   // ReportingUploader implementation:
-
   void StartUpload(const GURL& url,
                    const std::string& json,
                    UploadCallback callback) override;
 
-  bool RequestIsUpload(const URLRequest& request) override;
-
  private:
   std::vector<std::unique_ptr<PendingUpload>> pending_uploads_;
 
diff --git a/net/reporting/reporting_uploader.cc b/net/reporting/reporting_uploader.cc
index 2220858c..c7cbb92 100644
--- a/net/reporting/reporting_uploader.cc
+++ b/net/reporting/reporting_uploader.cc
@@ -23,15 +23,6 @@
 
 namespace {
 
-class UploadUserData : public base::SupportsUserData::Data {
- public:
-  static const void* const kUserDataKey;
-};
-
-// SetUserData needs a unique const void* to serve as the key, so create a const
-// void* and use its own address as the unique pointer.
-const void* const UploadUserData::kUserDataKey = &UploadUserData::kUserDataKey;
-
 ReportingUploader::Outcome ResponseCodeToOutcome(int response_code) {
   if (response_code >= 200 && response_code <= 299)
     return ReportingUploader::Outcome::SUCCESS;
@@ -94,9 +85,6 @@
     request->set_upload(
         ElementsUploadDataStream::CreateWithReader(std::move(reader), 0));
 
-    request->SetUserData(UploadUserData::kUserDataKey,
-                         std::make_unique<UploadUserData>());
-
     // This inherently sets mode = "no-cors", but that doesn't matter, because
     // the origins that are included in the upload don't actually get to see
     // the response.
@@ -110,11 +98,6 @@
     *upload = std::make_unique<Upload>(std::move(request), std::move(callback));
   }
 
-  // static
-  bool RequestIsUpload(const net::URLRequest& request) override {
-    return request.GetUserData(UploadUserData::kUserDataKey);
-  }
-
   // URLRequest::Delegate implementation:
 
   void OnReceivedRedirect(URLRequest* request,
diff --git a/net/reporting/reporting_uploader.h b/net/reporting/reporting_uploader.h
index f6c65c7..505b24db 100644
--- a/net/reporting/reporting_uploader.h
+++ b/net/reporting/reporting_uploader.h
@@ -15,7 +15,6 @@
 
 namespace net {
 
-class URLRequest;
 class URLRequestContext;
 
 // Uploads already-serialized reports and converts responses to one of the
@@ -36,9 +35,6 @@
                            const std::string& json,
                            UploadCallback callback) = 0;
 
-  // Returns whether |request| is an upload request sent by this uploader.
-  virtual bool RequestIsUpload(const URLRequest& request) = 0;
-
   // Creates a real implementation of |ReportingUploader| that uploads reports
   // using |context|.
   static std::unique_ptr<ReportingUploader> Create(
diff --git a/net/url_request/network_error_logging_delegate.h b/net/url_request/network_error_logging_delegate.h
index d61ec42..ec2238c 100644
--- a/net/url_request/network_error_logging_delegate.h
+++ b/net/url_request/network_error_logging_delegate.h
@@ -38,8 +38,6 @@
     int status_code;
     base::TimeDelta elapsed_time;
     Error type;
-
-    bool is_reporting_upload;
   };
 
   static const char kHeaderName[];
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index 3b76938..7b99fc9 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -31,7 +31,6 @@
 #include "net/log/net_log.h"
 #include "net/log/net_log_event_type.h"
 #include "net/log/net_log_source_type.h"
-#include "net/reporting/reporting_service.h"
 #include "net/ssl/ssl_cert_request_info.h"
 #include "net/url_request/redirect_info.h"
 #include "net/url_request/redirect_util.h"
@@ -1195,10 +1194,6 @@
       base::TimeTicks::Now() - load_timing_info_.request_start;
   details.type = status().ToNetError();
 
-  details.is_reporting_upload =
-      context()->reporting_service() &&
-      context()->reporting_service()->RequestIsUpload(*this);
-
   delegate->OnNetworkError(details);
 }
 #endif  // BUILDFLAG(ENABLE_REPORTING)
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 4e518ff..9d82eb5 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -7043,11 +7043,6 @@
     NOTIMPLEMENTED();
   }
 
-  bool RequestIsUpload(const URLRequest& request) override {
-    NOTIMPLEMENTED();
-    return true;
-  }
-
  private:
   std::vector<Header> headers_;
 };
diff --git a/services/data_decoder/public/cpp/safe_xml_parser.cc b/services/data_decoder/public/cpp/safe_xml_parser.cc
index 821bfd1d..54d7585 100644
--- a/services/data_decoder/public/cpp/safe_xml_parser.cc
+++ b/services/data_decoder/public/cpp/safe_xml_parser.cc
@@ -76,15 +76,15 @@
   delete this;
 }
 
-const base::Value* GetChildren(const base::Value& element) {
+}  // namespace
+
+const base::Value* GetXmlElementChildren(const base::Value& element) {
   if (!element.is_dict())
     return nullptr;
   return element.FindKeyOfType(mojom::XmlParser::kChildrenKey,
                                base::Value::Type::LIST);
 }
 
-}  // namespace
-
 std::string GetXmlQualifiedName(const std::string& name_space,
                                 const std::string& name) {
   return name_space.empty() ? name : name_space + ":" + name;
@@ -127,7 +127,7 @@
 
 bool GetXmlElementText(const base::Value& element, std::string* text) {
   DCHECK(text);
-  const base::Value* children = GetChildren(element);
+  const base::Value* children = GetXmlElementChildren(element);
   if (!children)
     return false;
 
@@ -171,7 +171,7 @@
 
 int GetXmlElementChildrenCount(const base::Value& element,
                                const std::string& name) {
-  const base::Value* children = GetChildren(element);
+  const base::Value* children = GetXmlElementChildren(element);
   if (!children)
     return 0;
   int child_count = 0;
@@ -187,7 +187,7 @@
 
 const base::Value* GetXmlElementChildWithType(const base::Value& element,
                                               const std::string& type) {
-  const base::Value* children = GetChildren(element);
+  const base::Value* children = GetXmlElementChildren(element);
   if (!children)
     return nullptr;
   for (const base::Value& value : children->GetList()) {
@@ -201,7 +201,7 @@
 
 const base::Value* GetXmlElementChildWithTag(const base::Value& element,
                                              const std::string& tag) {
-  const base::Value* children = GetChildren(element);
+  const base::Value* children = GetXmlElementChildren(element);
   if (!children)
     return nullptr;
   for (const base::Value& value : children->GetList()) {
@@ -216,7 +216,7 @@
     const base::Value& element,
     const std::string& tag,
     std::vector<const base::Value*>* children_out) {
-  const base::Value* children = GetChildren(element);
+  const base::Value* children = GetXmlElementChildren(element);
   if (!children)
     return false;
   bool found = false;
diff --git a/services/data_decoder/public/cpp/safe_xml_parser.h b/services/data_decoder/public/cpp/safe_xml_parser.h
index f9d61ae1..2dd7d4b1 100644
--- a/services/data_decoder/public/cpp/safe_xml_parser.h
+++ b/services/data_decoder/public/cpp/safe_xml_parser.h
@@ -52,6 +52,9 @@
 // Below are convenience methods for handling the elements returned by
 // ParseXml().
 
+// Returns all the children of |element|.
+const base::Value* GetXmlElementChildren(const base::Value& element);
+
 // Returns the qualified name |name_space|:|name| or simply |name| if
 // |name_space| is empty.
 std::string GetXmlQualifiedName(const std::string& name_space,
diff --git a/services/service_manager/sandbox/mac/common_v2.sb b/services/service_manager/sandbox/mac/common_v2.sb
index e5a9781f..ecc5076 100644
--- a/services/service_manager/sandbox/mac/common_v2.sb
+++ b/services/service_manager/sandbox/mac/common_v2.sb
@@ -44,7 +44,10 @@
   (string-append (param homedir-as-literal) subpath))
 
 ; Allow logging for all processes.
-(allow file-write* (path (param log-file-path)))
+(allow file-write*
+  (require-all
+    (path (param log-file-path))
+    (vnode-type REGULAR-FILE)))
 
 ; Allow component builds to work.
 (if (param-defined? component-path)
@@ -77,7 +80,10 @@
 (allow file-read-data (path "/private/etc/passwd"))
 
 ; Access to /dev.
-(allow file-ioctl file-read-data file-write-data (path "/dev/dtracehelper"))
+(allow file-ioctl file-read-data file-write-data
+  (require-all
+    (path "/dev/dtracehelper")
+    (vnode-type CHARACTER-DEVICE)))
 
 (allow file-read-data
   (path "/dev/null")
diff --git a/services/service_manager/sandbox/mac/renderer_v2.sb b/services/service_manager/sandbox/mac/renderer_v2.sb
index 5d56ee23..6fb66b7 100644
--- a/services/service_manager/sandbox/mac/renderer_v2.sb
+++ b/services/service_manager/sandbox/mac/renderer_v2.sb
@@ -19,7 +19,10 @@
   (path "/dev/autofs_nowait")
   (path "/dev/fd"))
 
-(allow file-write-data (path "/dev/null"))
+(allow file-write-data
+  (require-all
+    (path "/dev/null")
+    (vnode-type CHARACTER-DEVICE)))
 
 ; Reads from /Library.
 (allow file-read-data (subpath "/Library/Fonts"))
diff --git a/testing/buildbot/chromium.webkit.json b/testing/buildbot/chromium.webkit.json
index f24443a..5a5194e 100644
--- a/testing/buildbot/chromium.webkit.json
+++ b/testing/buildbot/chromium.webkit.json
@@ -302,25 +302,49 @@
     "gtest_tests": [
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.10.5"
+            }
+          ]
         },
         "test": "blink_heap_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.10.5"
+            }
+          ]
         },
         "test": "blink_platform_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.10.5"
+            }
+          ]
         },
         "test": "webkit_unit_tests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.10.5"
+            }
+          ]
         },
         "test": "wtf_unittests"
       }
@@ -363,25 +387,49 @@
     "gtest_tests": [
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11.6"
+            }
+          ]
         },
         "test": "blink_heap_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11.6"
+            }
+          ]
         },
         "test": "blink_platform_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11.6"
+            }
+          ]
         },
         "test": "webkit_unit_tests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11.6"
+            }
+          ]
         },
         "test": "wtf_unittests"
       }
@@ -424,25 +472,49 @@
     "gtest_tests": [
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11.6"
+            }
+          ]
         },
         "test": "blink_heap_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11.6"
+            }
+          ]
         },
         "test": "blink_platform_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11.6"
+            }
+          ]
         },
         "test": "webkit_unit_tests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11.6"
+            }
+          ]
         },
         "test": "wtf_unittests"
       }
@@ -488,25 +560,57 @@
     "gtest_tests": [
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac-10.12.6",
+              "pool": "Chrome-GPU"
+            }
+          ]
         },
         "test": "blink_heap_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac-10.12.6",
+              "pool": "Chrome-GPU"
+            }
+          ]
         },
         "test": "blink_platform_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac-10.12.6",
+              "pool": "Chrome-GPU"
+            }
+          ]
         },
         "test": "webkit_unit_tests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac-10.12.6",
+              "pool": "Chrome-GPU"
+            }
+          ]
         },
         "test": "wtf_unittests"
       }
@@ -551,25 +655,53 @@
     "gtest_tests": [
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "hidpi": "0",
+              "os": "Mac-10.12.6"
+            }
+          ]
         },
         "test": "blink_heap_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "hidpi": "0",
+              "os": "Mac-10.12.6"
+            }
+          ]
         },
         "test": "blink_platform_unittests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "hidpi": "0",
+              "os": "Mac-10.12.6"
+            }
+          ]
         },
         "test": "webkit_unit_tests"
       },
       {
         "swarming": {
-          "can_use_on_swarming_builders": false
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "hidpi": "0",
+              "os": "Mac-10.12.6"
+            }
+          ]
         },
         "test": "wtf_unittests"
       }
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index f6dfe61..6542c1e5 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -286,32 +286,6 @@
           'hard_timeout': 120,
         },
       },
-      # chromium.webkit
-      'WebKit Mac10.10': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (dbg)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (retina)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.12': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
     },
   },
   'blink_platform_unittests': {
@@ -344,34 +318,6 @@
       'Win10 Tests x64',
       'Win7 Tests (dbg)(1)',
     ],
-    'modifications': {
-      # on chromium.webkit
-      'WebKit Mac10.10': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (dbg)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (retina)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.12': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-    }
   },
   'boringssl_crypto_tests': {
     'remove_from': [
@@ -588,32 +534,6 @@
           'shards': 20,
         },
       },
-      # on chromium.webkit
-      'WebKit Mac10.10': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (dbg)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (retina)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.12': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
       # client.v8.chromium
       'Linux - Future (dbg)': {
         'swarming': {
@@ -4347,23 +4267,11 @@
       },
       'WebKit Mac10.10': {
         'swarming': {
-          'dimension_sets': [
-            {
-              'gpu': 'none',
-              'os': 'Mac-10.10.5',
-            }
-          ],
           'shards': 4,
         },
       },
       'WebKit Mac10.11': {
         'swarming': {
-          'dimension_sets': [
-            {
-              'gpu': 'none',
-              'os': 'Mac-10.11.6',
-            }
-          ],
           'shards': 4,
         },
       },
@@ -4372,37 +4280,16 @@
           '--debug',
         ],
         'swarming': {
-          'dimension_sets': [
-            {
-              'gpu': 'none',
-              'os': 'Mac-10.11.6',
-            }
-          ],
           'shards': 4,
         },
       },
       'WebKit Mac10.11 (retina)': {
         'swarming': {
-          'dimension_sets': [
-            {
-              'gpu': '1002:6821',
-              'hidpi': '1',
-              'os': 'Mac-10.12.6',
-              'pool': 'Chrome-GPU',
-            }
-          ],
           'shards': 4,
         },
       },
       'WebKit Mac10.12': {
         'swarming': {
-          'dimension_sets': [
-            {
-              'gpu': '8086:0a2e',
-              'hidpi': '0',
-              'os': 'Mac-10.12.6',
-            },
-          ],
           'shards': 4,
         },
       },
@@ -4542,31 +4429,6 @@
       'Win7 Tests (dbg)(1)',
     ],
     'modifications': {
-      'WebKit Mac10.10': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (dbg)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (retina)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.12': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
       # chromium.memory
       'Linux ASan LSan Tests (1)': {
         # These are very slow on the ASAN trybot for some reason.
@@ -4760,33 +4622,6 @@
       'Win10 Tests x64',
       'Win7 Tests (dbg)(1)',
     ],
-    'modifications': {
-      'WebKit Mac10.10': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (dbg)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.11 (retina)': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-      'WebKit Mac10.12': {
-        'swarming': {
-          'can_use_on_swarming_builders': False,
-        },
-      },
-    },
   },
   'zucchini_unittests': {
     'remove_from': [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index ca6358e..efedc77 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -1678,6 +1678,14 @@
           'isolated_scripts': 'chromium_webkit_isolated_scripts',
           'scripts': 'chromium_webkit_scripts',
         },
+        'swarming': {
+          'dimension_sets': [
+            {
+              'gpu': 'none',
+              'os': 'Mac-10.10.5',
+            }
+          ],
+        },
       },
       'WebKit Mac10.11': {
         'test_suites': {
@@ -1685,6 +1693,14 @@
           'isolated_scripts': 'chromium_webkit_isolated_scripts',
           'scripts': 'chromium_webkit_scripts',
         },
+        'swarming': {
+          'dimension_sets': [
+            {
+              'gpu': 'none',
+              'os': 'Mac-10.11.6',
+            }
+          ],
+        },
       },
       'WebKit Mac10.11 (dbg)': {
         'test_suites': {
@@ -1692,6 +1708,14 @@
           'isolated_scripts': 'chromium_webkit_isolated_scripts',
           'scripts': 'chromium_webkit_scripts',
         },
+        'swarming': {
+          'dimension_sets': [
+            {
+              'gpu': 'none',
+              'os': 'Mac-10.11.6',
+            }
+          ],
+        },
       },
       'WebKit Mac10.11 (retina)': {
         'test_suites': {
@@ -1699,6 +1723,16 @@
           'isolated_scripts': 'chromium_webkit_isolated_scripts',
           'scripts': 'chromium_webkit_scripts',
         },
+        'swarming': {
+          'dimension_sets': [
+            {
+              'gpu': '1002:6821',
+              'hidpi': '1',
+              'os': 'Mac-10.12.6',
+              'pool': 'Chrome-GPU',
+            }
+          ],
+        },
       },
       'WebKit Mac10.12': {
         'test_suites': {
@@ -1706,6 +1740,15 @@
           'isolated_scripts': 'chromium_webkit_isolated_scripts',
           'scripts': 'chromium_webkit_scripts',
         },
+        'swarming': {
+          'dimension_sets': [
+            {
+              'gpu': '8086:0a2e',
+              'hidpi': '0',
+              'os': 'Mac-10.12.6',
+            },
+          ],
+        },
       },
       'WebKit Win x64 Builder': {
         'test_suites': {
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
index 5637e5d..48d4e3f0 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
@@ -54,8 +54,8 @@
 PASS window.cached_navigator_serviceWorker.onmessage is null
 PASS window.cached_navigator_usb.onconnect is null
 PASS window.cached_navigator_usb.ondisconnect is null
-PASS window.cached_navigator_vr.ondeviceconnect is null
-PASS window.cached_navigator_vr.ondevicedisconnect is null
+PASS window.cached_navigator_xr.ondeviceconnect is null
+PASS window.cached_navigator_xr.ondevicedisconnect is null
 PASS window.cached_performance.onresourcetimingbufferfull is null
 PASS window.cached_performance_navigation.redirectCount is 0
 PASS window.cached_performance_navigation.type is 0
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
index 89e5f92..973346a 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
@@ -54,8 +54,8 @@
 PASS window.cached_navigator_serviceWorker.onmessage is null
 PASS window.cached_navigator_usb.onconnect is null
 PASS window.cached_navigator_usb.ondisconnect is null
-PASS window.cached_navigator_vr.ondeviceconnect is null
-PASS window.cached_navigator_vr.ondevicedisconnect is null
+PASS window.cached_navigator_xr.ondeviceconnect is null
+PASS window.cached_navigator_xr.ondevicedisconnect is null
 PASS window.cached_performance.onresourcetimingbufferfull is null
 PASS window.cached_performance_navigation.redirectCount is 0
 PASS window.cached_performance_navigation.type is 0
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
index a4878cc..5ef8fd7 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
@@ -54,8 +54,8 @@
 PASS window.cached_navigator_serviceWorker.onmessage is null
 PASS window.cached_navigator_usb.onconnect is null
 PASS window.cached_navigator_usb.ondisconnect is null
-PASS window.cached_navigator_vr.ondeviceconnect is null
-PASS window.cached_navigator_vr.ondevicedisconnect is null
+PASS window.cached_navigator_xr.ondeviceconnect is null
+PASS window.cached_navigator_xr.ondevicedisconnect is null
 PASS window.cached_performance.onresourcetimingbufferfull is null
 PASS window.cached_performance_navigation.redirectCount is 0
 PASS window.cached_performance_navigation.type is 0
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
index 81a6c0f..72ca4664 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
@@ -63,8 +63,8 @@
 PASS oldChildWindow.navigator.userAgent is newChildWindow.navigator.userAgent
 PASS oldChildWindow.navigator.vendor is newChildWindow.navigator.vendor
 PASS oldChildWindow.navigator.vendorSub is newChildWindow.navigator.vendorSub
-PASS oldChildWindow.navigator.vr.ondeviceconnect is newChildWindow.navigator.vr.ondeviceconnect
-PASS oldChildWindow.navigator.vr.ondevicedisconnect is newChildWindow.navigator.vr.ondevicedisconnect
+PASS oldChildWindow.navigator.xr.ondeviceconnect is newChildWindow.navigator.xr.ondeviceconnect
+PASS oldChildWindow.navigator.xr.ondevicedisconnect is newChildWindow.navigator.xr.ondevicedisconnect
 PASS oldChildWindow.onabort is newChildWindow.onabort
 PASS oldChildWindow.onafterprint is newChildWindow.onafterprint
 PASS oldChildWindow.onanimationend is newChildWindow.onanimationend
diff --git a/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_called.html b/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_called.html
deleted file mode 100644
index 20fc1458..0000000
--- a/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_called.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
-<script>
-let fakeDisplays = fakeVRDisplays();
-
-vr_session_test( (t, session) => {
-  // Session must have a baseLayer or frame requests will be ignored.
-  session.baseLayer = new VRWebGLLayer(session, gl);
-
-  function onFrame(vrFrame) {
-    t.step( () => {
-      assert_true(vrFrame instanceof VRPresentationFrame);
-    });
-    t.done();
-  }
-
-  session.requestFrame(onFrame);
-}, fakeDisplays["Pixel"], { exclusive: true },
-"VRSession requestFrame properly calls the provided callback");
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_blocked_by_getVRDisplays.html b/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_blocked_by_getVRDisplays.html
deleted file mode 100644
index 9dbc7ce..0000000
--- a/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_blocked_by_getVRDisplays.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script>
-
-promise_test(t => navigator.getVRDisplays().then(() => {
-  assert_true(navigator.vr == null);
-}), "Test that access to navigator.vr is blocked once navigator.getVRDisplays has been called.");
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_blocks_getVRDisplays.html b/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_blocks_getVRDisplays.html
deleted file mode 100644
index 43de3b0..0000000
--- a/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_blocks_getVRDisplays.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script>
-
-promise_test(t => navigator.vr.requestDevice().then(() => {
-  return promise_rejects(t, "InvalidStateError", navigator.getVRDisplays());
-}), "Test that calls to navigator.getVRDisplays are blocked once navigator.vr has been accessed.");
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_detached.html b/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_detached.html
deleted file mode 100644
index 0d9b51e..0000000
--- a/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_detached.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>Detached use of navigator.vr</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-</head>
-<body>
-<iframe sandbox="allow-same-origin" id="subframe"></iframe>
-<script>
-
-promise_test(t => {
-  var nav_vr = window.frames[0].navigator.vr;
-  document.getElementById("subframe").remove();
-  return promise_rejects(t, "InvalidStateError", nav_vr.requestDevice());
-}, "Check that navigator.vr.requestDevice rejects on a detached navigator.");
-
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_early_detached.html b/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_early_detached.html
deleted file mode 100644
index a993783b..0000000
--- a/third_party/WebKit/LayoutTests/vr/latest/navigator_vr_early_detached.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>Detached use of navigator.vr()</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-</head>
-<body>
-<iframe sandbox="allow-same-origin" id="subframe"></iframe>
-<script>
-//This test ensures that if a navigator.vr gets called on a detached navigator the renderer does not crash.
-test(function() {
-  var nav = window.frames[0].navigator;
-  document.getElementById("subframe").remove();
-  // If all goes well, nav.vr should just be null, otherwise the renderer will crash. 
-  assert_equals(nav.vr, null);
-}, "navigator.vr does not crash");
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/requestDevice_always_resolves.html b/third_party/WebKit/LayoutTests/vr/latest/requestDevice_always_resolves.html
deleted file mode 100644
index 7081f93..0000000
--- a/third_party/WebKit/LayoutTests/vr/latest/requestDevice_always_resolves.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script>
-
-promise_test(t => navigator.vr.requestDevice().then(device => {
-  assert_true(device == null);
-}), "Test that navigator.vr.requestDevice always resolves with at least a null.");
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/requestDevice_zero_devices.html b/third_party/WebKit/LayoutTests/vr/latest/requestDevice_zero_devices.html
deleted file mode 100644
index 70aa2ed..0000000
--- a/third_party/WebKit/LayoutTests/vr/latest/requestDevice_zero_devices.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
-<script>
-let fakeDisplays = fakeVRDisplays();
-
-vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
-    t.step( () => {
-      assert_true(device == null);
-    }, "requestDevice returned correct results");
-  }, (err) => {
-    t.step( () => {
-      assert_unreached("requestDevice rejected");
-    });
-  }).then( () => {
-    t.done();
-  });
-}, [],
-"navigator.vr.requestDevice properly returns zero devices");
-
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js b/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js
index d8ef9a11..3f395cb 100644
--- a/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js
+++ b/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js
@@ -174,32 +174,39 @@
   func(t, mockVRService);
 }
 
-function vr_session_test(func, vrDevice, sessionOptions, name, properties) {
+// TODO(offenwanger) Remove this when we switch over to promise tests.
+function xr_session_test(func, vrDevice, sessionOptions, name, properties) {
   mockVRService.setVRDisplays([vrDevice]);
   let t = async_test(name, properties);
 
-  navigator.vr.requestDevice().then( (device) => {
-    // Perform the session request in a user gesture.
-    function thunk() {
-      document.removeEventListener("keypress", thunk, false);
+  navigator.xr.requestDevice().then(
+      (device) => {
+        // Perform the session request in a user gesture.
+        function thunk() {
+          document.removeEventListener('keypress', thunk, false);
 
-      device.requestSession(sessionOptions).then( (session) => {
-        func(t, session, mockVRService);
-      }, (err) => {
-        t.step( () => {
-          assert_unreached("requestSession rejected");
+          device.requestSession(sessionOptions)
+              .then(
+                  (session) => {
+                    func(t, session, mockVRService);
+                  },
+                  (err) => {
+                    t.step(() => {
+                      assert_unreached('requestSession rejected');
+                    });
+                    t.done();
+                  });
+        }
+        document.addEventListener('keypress', thunk, false);
+        eventSender.keyDown(' ', []);
+      },
+      (err) => {
+        t.step(() => {
+          assert_unreached(
+              'navigator.xr.getDevices rejected in xr_session_test');
         });
         t.done();
       });
-    }
-    document.addEventListener("keypress", thunk, false);
-    eventSender.keyDown(" ", []);
-  }, (err) => {
-    t.step( () => {
-      assert_unreached("navigator.vr.getDevices rejected in vr_session_test");
-    });
-    t.done();
-  });
 }
 
 // Gets the corresponding transform matrix for a WebVR 1.1 pose
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
index d919b3fe..8ef99c3a 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -4499,9 +4499,9 @@
     getter userAgent
     getter vendor
     getter vendorSub
-    getter vr
     getter webkitPersistentStorage
     getter webkitTemporaryStorage
+    getter xr
     method cancelKeyboardLock
     method constructor
     method getBattery
@@ -7204,34 +7204,6 @@
     getter bytesWritten
     getter status
     method constructor
-interface VR : EventTarget
-    attribute @@toStringTag
-    getter ondeviceconnect
-    getter ondevicedisconnect
-    method constructor
-    method requestDevice
-    setter ondeviceconnect
-    setter ondevicedisconnect
-interface VRCoordinateSystem
-    attribute @@toStringTag
-    method constructor
-    method getTransformTo
-interface VRDevice : EventTarget
-    attribute @@toStringTag
-    getter deviceName
-    getter isExternal
-    method constructor
-    method requestSession
-    method supportsSession
-interface VRDeviceEvent : Event
-    attribute @@toStringTag
-    getter device
-    method constructor
-interface VRDevicePose
-    attribute @@toStringTag
-    getter poseModelMatrix
-    method constructor
-    method getViewMatrix
 interface VRDisplay : EventTarget
     attribute @@toStringTag
     getter capabilities
@@ -7278,14 +7250,6 @@
     getter rightProjectionMatrix
     getter rightViewMatrix
     method constructor
-interface VRFrameOfReference : VRCoordinateSystem
-    attribute @@toStringTag
-    getter bounds
-    getter emulatedHeight
-    method constructor
-interface VRLayer
-    attribute @@toStringTag
-    method constructor
 interface VRPose
     attribute @@toStringTag
     getter angularAcceleration
@@ -7295,80 +7259,12 @@
     getter orientation
     getter position
     method constructor
-interface VRPresentationFrame
-    attribute @@toStringTag
-    getter session
-    getter views
-    method constructor
-    method getDevicePose
-interface VRSession : EventTarget
-    attribute @@toStringTag
-    getter baseLayer
-    getter depthFar
-    getter depthNear
-    getter device
-    getter exclusive
-    getter onblur
-    getter onend
-    getter onfocus
-    getter onresetpose
-    method cancelFrame
-    method constructor
-    method end
-    method requestFrame
-    method requestFrameOfReference
-    setter baseLayer
-    setter depthFar
-    setter depthNear
-    setter onblur
-    setter onend
-    setter onfocus
-    setter onresetpose
-interface VRSessionEvent : Event
-    attribute @@toStringTag
-    getter session
-    method constructor
-interface VRStageBounds
-    attribute @@toStringTag
-    getter geometry
-    method constructor
-interface VRStageBoundsPoint
-    attribute @@toStringTag
-    getter x
-    getter z
-    method constructor
 interface VRStageParameters
     attribute @@toStringTag
     getter sittingToStandingTransform
     getter sizeX
     getter sizeZ
     method constructor
-interface VRView
-    attribute @@toStringTag
-    getter eye
-    getter projectionMatrix
-    method constructor
-    method getViewport
-interface VRViewport
-    attribute @@toStringTag
-    getter height
-    getter width
-    getter x
-    getter y
-    method constructor
-interface VRWebGLLayer : VRLayer
-    attribute @@toStringTag
-    getter alpha
-    getter antialias
-    getter context
-    getter depth
-    getter framebuffer
-    getter framebufferHeight
-    getter framebufferWidth
-    getter multiview
-    getter stencil
-    method constructor
-    method requestViewportScaling
 interface VTTCue : TextTrackCue
     attribute @@toStringTag
     getter align
@@ -8990,6 +8886,110 @@
     method constructor
     method iterateNext
     method snapshotItem
+interface XR : EventTarget
+    attribute @@toStringTag
+    getter ondeviceconnect
+    getter ondevicedisconnect
+    method constructor
+    method requestDevice
+    setter ondeviceconnect
+    setter ondevicedisconnect
+interface XRCoordinateSystem
+    attribute @@toStringTag
+    method constructor
+    method getTransformTo
+interface XRDevice : EventTarget
+    attribute @@toStringTag
+    getter deviceName
+    getter isExternal
+    method constructor
+    method requestSession
+    method supportsSession
+interface XRDeviceEvent : Event
+    attribute @@toStringTag
+    getter device
+    method constructor
+interface XRDevicePose
+    attribute @@toStringTag
+    getter poseModelMatrix
+    method constructor
+    method getViewMatrix
+interface XRFrameOfReference : XRCoordinateSystem
+    attribute @@toStringTag
+    getter bounds
+    getter emulatedHeight
+    method constructor
+interface XRLayer
+    attribute @@toStringTag
+    method constructor
+interface XRPresentationFrame
+    attribute @@toStringTag
+    getter session
+    getter views
+    method constructor
+    method getDevicePose
+interface XRSession : EventTarget
+    attribute @@toStringTag
+    getter baseLayer
+    getter depthFar
+    getter depthNear
+    getter device
+    getter exclusive
+    getter onblur
+    getter onend
+    getter onfocus
+    getter onresetpose
+    method cancelFrame
+    method constructor
+    method end
+    method requestFrame
+    method requestFrameOfReference
+    setter baseLayer
+    setter depthFar
+    setter depthNear
+    setter onblur
+    setter onend
+    setter onfocus
+    setter onresetpose
+interface XRSessionEvent : Event
+    attribute @@toStringTag
+    getter session
+    method constructor
+interface XRStageBounds
+    attribute @@toStringTag
+    getter geometry
+    method constructor
+interface XRStageBoundsPoint
+    attribute @@toStringTag
+    getter x
+    getter z
+    method constructor
+interface XRView
+    attribute @@toStringTag
+    getter eye
+    getter projectionMatrix
+    method constructor
+    method getViewport
+interface XRViewport
+    attribute @@toStringTag
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+interface XRWebGLLayer : XRLayer
+    attribute @@toStringTag
+    getter alpha
+    getter antialias
+    getter context
+    getter depth
+    getter framebuffer
+    getter framebufferHeight
+    getter framebufferWidth
+    getter multiview
+    getter stencil
+    method constructor
+    method requestViewportScaling
 interface XSLTProcessor
     attribute @@toStringTag
     method clearParameters
diff --git a/third_party/WebKit/LayoutTests/vr/latest/events_deviceconnect.html b/third_party/WebKit/LayoutTests/xr/events_deviceconnect.html
similarity index 64%
rename from third_party/WebKit/LayoutTests/vr/latest/events_deviceconnect.html
rename to third_party/WebKit/LayoutTests/xr/events_deviceconnect.html
index dcba829..54356d3 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/events_deviceconnect.html
+++ b/third_party/WebKit/LayoutTests/xr/events_deviceconnect.html
@@ -1,17 +1,17 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test((t, mockService) => {
   let watcherDone = new Event("watcherdone");
-  let eventWatcher = new EventWatcher(t, navigator.vr, ["deviceconnect",
+  let eventWatcher = new EventWatcher(t, navigator.xr, ["deviceconnect",
                                                         "watcherdone"]);
   eventWatcher.wait_for(["deviceconnect", "watcherdone"])
     .then( () => {
@@ -19,14 +19,14 @@
     });
 
   // The event should fire when a listener is added even if the devices are not
-  // explicity queried with navigator.vr.requestDevice().
+  // explicity queried with navigator.xr.requestDevice().
   function onDeviceConnect(event) {
     t.step( () => {
       assert_equals(event.device.deviceName, 'Google, Inc. Daydream View');
-      navigator.vr.dispatchEvent(watcherDone);
+      navigator.xr.dispatchEvent(watcherDone);
     });
   }
-  navigator.vr.addEventListener("deviceconnect", onDeviceConnect, false);
+  navigator.xr.addEventListener("deviceconnect", onDeviceConnect, false);
 
 }, [fakeDisplays["Pixel"]],
 "Test deviceconnect fires when devices are connected.");
diff --git a/third_party/WebKit/LayoutTests/vr/latest/events_session_end.html b/third_party/WebKit/LayoutTests/xr/events_session_end.html
similarity index 78%
rename from third_party/WebKit/LayoutTests/vr/latest/events_session_end.html
rename to third_party/WebKit/LayoutTests/xr/events_session_end.html
index 2f6c560..0003e36 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/events_session_end.html
+++ b/third_party/WebKit/LayoutTests/xr/events_session_end.html
@@ -1,19 +1,19 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test((t, mockService) => {
   let watcherDone = new Event("watcherdone");
 
-  navigator.vr.requestDevice().then( (device) => {
+  navigator.xr.requestDevice().then( (device) => {
     runWithUserGesture( () => {
       device.requestSession({ exclusive: true }).then( (session) => {
         let eventWatcher = new EventWatcher(t, session, ["end", "watcherdone"]);
diff --git a/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_called.html b/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_called.html
new file mode 100644
index 0000000..bebf33cd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_called.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<canvas id="webgl-canvas"></canvas>
+<script src="../vr/resources/presentation-setup.js"></script>
+<script>
+let fakeDisplays = fakeVRDisplays();
+
+xr_session_test( (t, session) => {
+  // Session must have a baseLayer or frame requests will be ignored.
+  session.baseLayer = new XRWebGLLayer(session, gl);
+
+  function onFrame(xrFrame) {
+    t.step( () => {
+      assert_true(xrFrame instanceof XRPresentationFrame);
+    });
+    t.done();
+  }
+
+  session.requestFrame(onFrame);
+}, fakeDisplays["Pixel"], { exclusive: true },
+"XRSession requestFrame properly calls the provided callback");
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_invalidhandle.html b/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_invalidhandle.html
similarity index 69%
rename from third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_invalidhandle.html
rename to third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_invalidhandle.html
index b9267c8..a6dcf73 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_invalidhandle.html
+++ b/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_invalidhandle.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
-vr_session_test( (t, session) => {
+xr_session_test( (t, session) => {
   // Session must have a baseLayer or frame requests will be ignored.
-  session.baseLayer = new VRWebGLLayer(session, gl);
+  session.baseLayer = new XRWebGLLayer(session, gl);
 
   let counter = 0;
 
@@ -36,6 +36,6 @@
   session.cancelFrame(0.5);
   session.cancelFrame(null);
 }, fakeDisplays["Pixel"], { exclusive: true },
-"VRSession cancelFrame does not have unexpected behavior when given invalid handles");
+"XRSession cancelFrame does not have unexpected behavior when given invalid handles");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_nolayer.html b/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_nolayer.html
similarity index 70%
rename from third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_nolayer.html
rename to third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_nolayer.html
index 43ee171..399006b 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_nolayer.html
+++ b/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_nolayer.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
-vr_session_test( (t, session) => {
+xr_session_test( (t, session) => {
   // Session must have a baseLayer or frame requests will be ignored.
-  let webglLayer = new VRWebGLLayer(session, gl);
+  let webglLayer = new XRWebGLLayer(session, gl);
 
   function onBadFrame(vrFrame) {
     t.step( () => {
@@ -42,6 +42,6 @@
     assert_not_equals(goodHandle, 0);
   });
 }, fakeDisplays["Pixel"], { exclusive: true },
-"VRSession requestFrame must fail if the session has no baseLayer");
+"XRSession requestFrame must fail if the session has no baseLayer");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_unregister.html b/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_unregister.html
similarity index 75%
rename from third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_unregister.html
rename to third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_unregister.html
index 249a29c..9151c8b 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/exclusive_requestFrame_unregister.html
+++ b/third_party/WebKit/LayoutTests/xr/exclusive_requestFrame_unregister.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
-vr_session_test( (t, session) => {
+xr_session_test( (t, session) => {
   // Session must have a baseLayer or frame requests will be ignored.
-  session.baseLayer = new VRWebGLLayer(session, gl);
+  session.baseLayer = new XRWebGLLayer(session, gl);
 
   function onFrameBad(vrFrame) {
     t.step( () => {
@@ -48,6 +48,6 @@
   session.requestFrame(onFrameGood);
   handle2 = session.requestFrame(onFrameBad);
 }, fakeDisplays["Pixel"], { exclusive: true },
-"VRSession requestFrame callbacks can be unregistered with cancelFrame");
+"XRSession requestFrame callbacks can be unregistered with cancelFrame");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/getDevicePose_oneframeupdate.html b/third_party/WebKit/LayoutTests/xr/getDevicePose_oneframeupdate.html
similarity index 74%
rename from third_party/WebKit/LayoutTests/vr/latest/getDevicePose_oneframeupdate.html
rename to third_party/WebKit/LayoutTests/xr/getDevicePose_oneframeupdate.html
index 0737052..26b98fc 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/getDevicePose_oneframeupdate.html
+++ b/third_party/WebKit/LayoutTests/xr/getDevicePose_oneframeupdate.html
@@ -1,19 +1,19 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
-vr_session_test( (t, session, mockService) => {
+xr_session_test( (t, session, mockService) => {
   // Session must have a baseLayer or else frame requests will be ignored.
-  session.baseLayer = new VRWebGLLayer(session, gl);
+  session.baseLayer = new XRWebGLLayer(session, gl);
 
   session.requestFrameOfReference("eyeLevel").then((frameOfRef) => {
     let expected_pose = VALID_POSE;
@@ -48,6 +48,6 @@
     session.requestFrame(onFrame);
   });
 }, fakeDisplays["Pixel"], { exclusive: true },
-"VRPresentationFrame getDevicePose updates on the next frame");
+"XRPresentationFrame getDevicePose updates on the next frame");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/xr/navigator_xr_blocked_by_getVRDisplays.html b/third_party/WebKit/LayoutTests/xr/navigator_xr_blocked_by_getVRDisplays.html
new file mode 100644
index 0000000..7a84f4855
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/xr/navigator_xr_blocked_by_getVRDisplays.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script>
+
+promise_test(t => navigator.getVRDisplays().then(() => {
+  assert_true(navigator.xr == null);
+}), "Test that access to navigator.xr is blocked once navigator.getVRDisplays has been called.");
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/xr/navigator_xr_blocks_getVRDisplays.html b/third_party/WebKit/LayoutTests/xr/navigator_xr_blocks_getVRDisplays.html
new file mode 100644
index 0000000..14039e9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/xr/navigator_xr_blocks_getVRDisplays.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script>
+
+promise_test(t => navigator.xr.requestDevice().then(() => {
+  return promise_rejects(t, "InvalidStateError", navigator.getVRDisplays());
+}), "Test that calls to navigator.getVRDisplays are blocked once navigator.xr has been accessed.");
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/xr/navigator_xr_detached.html b/third_party/WebKit/LayoutTests/xr/navigator_xr_detached.html
new file mode 100644
index 0000000..4a657d8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/xr/navigator_xr_detached.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Detached use of navigator.xr</title>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+</head>
+<body>
+<iframe sandbox="allow-same-origin" id="subframe"></iframe>
+<script>
+
+promise_test(t => {
+  var nav_xr = window.frames[0].navigator.xr;
+  document.getElementById("subframe").remove();
+  return promise_rejects(t, "InvalidStateError", nav_xr.requestDevice());
+}, "Check that navigator.xr.requestDevice rejects on a detached navigator.");
+
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/xr/navigator_xr_early_detached.html b/third_party/WebKit/LayoutTests/xr/navigator_xr_early_detached.html
new file mode 100644
index 0000000..b2e52af
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/xr/navigator_xr_early_detached.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Detached use of navigator.xr()</title>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+</head>
+<body>
+<iframe sandbox="allow-same-origin" id="subframe"></iframe>
+<script>
+//This test ensures that if a navigator.xr gets called on a detached navigator the renderer does not crash.
+test(function() {
+  var nav = window.frames[0].navigator;
+  document.getElementById("subframe").remove();
+  // If all goes well, nav.xr should just be null, otherwise the renderer will crash. 
+  assert_equals(nav.xr, null);
+}, "navigator.xr does not crash");
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/xr/requestDevice_always_resolves.html b/third_party/WebKit/LayoutTests/xr/requestDevice_always_resolves.html
new file mode 100644
index 0000000..060e80d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/xr/requestDevice_always_resolves.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script>
+
+promise_test(t => navigator.xr.requestDevice().then(device => {
+  assert_true(device == null);
+}), "Test that navigator.xr.requestDevice always resolves with at least a null.");
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/requestDevice_one_device.html b/third_party/WebKit/LayoutTests/xr/requestDevice_one_device.html
similarity index 60%
rename from third_party/WebKit/LayoutTests/vr/latest/requestDevice_one_device.html
rename to third_party/WebKit/LayoutTests/xr/requestDevice_one_device.html
index 06920c4..40229191 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/requestDevice_one_device.html
+++ b/third_party/WebKit/LayoutTests/xr/requestDevice_one_device.html
@@ -1,16 +1,16 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
     t.step( () => {
       assert_true(device != null);
       assert_equals(device.deviceName, 'Google, Inc. Daydream View');
@@ -24,6 +24,6 @@
     t.done();
   });
 }, [fakeDisplays["Pixel"]],
-"navigator.vr.requestDevice properly returns a single device");
+"navigator.xr.requestDevice properly returns a single device");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/requestDevice_two_devices.html b/third_party/WebKit/LayoutTests/xr/requestDevice_two_devices.html
similarity index 67%
rename from third_party/WebKit/LayoutTests/vr/latest/requestDevice_two_devices.html
rename to third_party/WebKit/LayoutTests/xr/requestDevice_two_devices.html
index f7c71ab..82edaf58 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/requestDevice_two_devices.html
+++ b/third_party/WebKit/LayoutTests/xr/requestDevice_two_devices.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 vr_test( (t) => {
   // TODO(offenwanger) When we know how to we want to select which device to
   // return, update this test.
 
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
     t.step( () => {
       assert_true(device != null);
     }, "requestDevice returned result");
@@ -29,6 +29,6 @@
     t.done();
   });
 }, [fakeDisplays["Pixel"], fakeDisplays["FakeMagicWindowOnly"]],
-"navigator.vr.requestDevice properly returns one device when there are two");
+"navigator.xr.requestDevice properly returns one device when there are two");
 </script>
 
diff --git a/third_party/WebKit/LayoutTests/xr/requestDevice_zero_devices.html b/third_party/WebKit/LayoutTests/xr/requestDevice_zero_devices.html
new file mode 100644
index 0000000..6334f19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/xr/requestDevice_zero_devices.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
+<script>
+let fakeDisplays = fakeVRDisplays();
+
+vr_test( (t) => {
+  return navigator.xr.requestDevice().then( (device) => {
+    t.step( () => {
+      assert_true(device == null);
+    }, "requestDevice returned correct results");
+  }, (err) => {
+    t.step( () => {
+      assert_unreached("requestDevice rejected");
+    });
+  }).then( () => {
+    t.done();
+  });
+}, [],
+"navigator.xr.requestDevice properly returns zero devices");
+
+</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_no_gesture.html b/third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_no_gesture.html
similarity index 63%
rename from third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_no_gesture.html
rename to third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_no_gesture.html
index 5e46bdf..9e48a21d 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_no_gesture.html
+++ b/third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_no_gesture.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
 
     device.requestSession({ exclusive: true }).then(() => {
       assert_unreached("requestSession resolved unexpectedly");
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_supported.html b/third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_supported.html
similarity index 68%
rename from third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_supported.html
rename to third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_supported.html
index e1736029..84bfc45 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_supported.html
+++ b/third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_supported.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
 
     runWithUserGesture( () => {
       device.requestSession({ exclusive: true }).then( (session) => {
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_unsupported.html b/third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_unsupported.html
similarity index 65%
rename from third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_unsupported.html
rename to third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_unsupported.html
index 30a7a8f1..faee322 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_requestSession_exclusive_unsupported.html
+++ b/third_party/WebKit/LayoutTests/xr/xrDevice_requestSession_exclusive_unsupported.html
@@ -1,17 +1,17 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (magicWindowOnlyDevice) => {
+  return navigator.xr.requestDevice().then( (magicWindowOnlyDevice) => {
     runWithUserGesture( () => {
 
       magicWindowOnlyDevice.requestSession({ exclusive: true }).then(() => {
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_exclusive_rejects.html b/third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_exclusive_rejects.html
similarity index 67%
rename from third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_exclusive_rejects.html
rename to third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_exclusive_rejects.html
index e563716..186b85f 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_exclusive_rejects.html
+++ b/third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_exclusive_rejects.html
@@ -1,16 +1,16 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (magicWindowOnlyDevice) => {
+  return navigator.xr.requestDevice().then( (magicWindowOnlyDevice) => {
 
     magicWindowOnlyDevice.supportsSession({ exclusive: true }).then( () => {
       t.step( () => {
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_exclusive_resolves.html b/third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_exclusive_resolves.html
similarity index 66%
rename from third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_exclusive_resolves.html
rename to third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_exclusive_resolves.html
index 7322bdbf..53ad8939 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_exclusive_resolves.html
+++ b/third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_exclusive_resolves.html
@@ -1,16 +1,16 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
 
     device.supportsSession({ exclusive: true }).then( () => {
       // Expected result
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_non_exclusive.html b/third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_non_exclusive.html
similarity index 67%
rename from third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_non_exclusive.html
rename to third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_non_exclusive.html
index 812da2e8..493dd7a 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrDevice_supportsSession_non_exclusive.html
+++ b/third_party/WebKit/LayoutTests/xr/xrDevice_supportsSession_non_exclusive.html
@@ -1,16 +1,16 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
 
     device.supportsSession().then( () => {
       t.step( () => {
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrSession_exclusive.html b/third_party/WebKit/LayoutTests/xr/xrSession_exclusive.html
similarity index 71%
rename from third_party/WebKit/LayoutTests/vr/latest/vrSession_exclusive.html
rename to third_party/WebKit/LayoutTests/xr/xrSession_exclusive.html
index 15626987..7faf007 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrSession_exclusive.html
+++ b/third_party/WebKit/LayoutTests/xr/xrSession_exclusive.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
     runWithUserGesture( () => {
       device.requestSession({ exclusive: true }).then( (session) => {
         t.step( () => {
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrSession_prevent_multiple_exclusive.html b/third_party/WebKit/LayoutTests/xr/xrSession_prevent_multiple_exclusive.html
similarity index 80%
rename from third_party/WebKit/LayoutTests/vr/latest/vrSession_prevent_multiple_exclusive.html
rename to third_party/WebKit/LayoutTests/xr/xrSession_prevent_multiple_exclusive.html
index 7134cf4..a318235 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrSession_prevent_multiple_exclusive.html
+++ b/third_party/WebKit/LayoutTests/xr/xrSession_prevent_multiple_exclusive.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
     runWithUserGesture( () => {
       device.requestSession({ exclusive: true }).then( (session) => {
         runWithUserGesture( () => {
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrSession_requestFrameOfReference.html b/third_party/WebKit/LayoutTests/xr/xrSession_requestFrameOfReference.html
similarity index 71%
rename from third_party/WebKit/LayoutTests/vr/latest/vrSession_requestFrameOfReference.html
rename to third_party/WebKit/LayoutTests/xr/xrSession_requestFrameOfReference.html
index be4a377af..16a298a6 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrSession_requestFrameOfReference.html
+++ b/third_party/WebKit/LayoutTests/xr/xrSession_requestFrameOfReference.html
@@ -1,18 +1,18 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 vr_test( (t) => {
-  return navigator.vr.requestDevice().then( (device) => {
+  return navigator.xr.requestDevice().then( (device) => {
     runWithUserGesture( () => {
       device.requestSession({ exclusive: true }).then( (session) => {
 
@@ -24,8 +24,8 @@
         return Promise.all([
           session.requestFrameOfReference("headModel").then( (frameOfRef) => {
             t.step( () => {
-              assert_true(frameOfRef instanceof VRCoordinateSystem);
-              assert_true(frameOfRef instanceof VRFrameOfReference);
+              assert_true(frameOfRef instanceof XRCoordinateSystem);
+              assert_true(frameOfRef instanceof XRFrameOfReference);
             }, "'headModel' Frame of Reference is the correct type.");
           }, (err) => {
             t.step( () => {
@@ -35,8 +35,8 @@
 
           session.requestFrameOfReference("eyeLevel").then( (frameOfRef) => {
             t.step( () => {
-              assert_true(frameOfRef instanceof VRCoordinateSystem);
-              assert_true(frameOfRef instanceof VRFrameOfReference);
+              assert_true(frameOfRef instanceof XRCoordinateSystem);
+              assert_true(frameOfRef instanceof XRFrameOfReference);
             }, "'eyeLevel' Frame of Reference is the correct type.");
           }, (err) => {
             t.step( () => {
@@ -46,8 +46,8 @@
 
           session.requestFrameOfReference("stage").then( (frameOfRef) => {
             t.step( () => {
-              assert_true(frameOfRef instanceof VRCoordinateSystem);
-              assert_true(frameOfRef instanceof VRFrameOfReference);
+              assert_true(frameOfRef instanceof XRCoordinateSystem);
+              assert_true(frameOfRef instanceof XRFrameOfReference);
             }, "'stage' Frame of Reference is the correct type.");
           }, (err) => {
             t.step( () => {
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrView_match.html b/third_party/WebKit/LayoutTests/xr/xrView_match.html
similarity index 64%
rename from third_party/WebKit/LayoutTests/vr/latest/vrView_match.html
rename to third_party/WebKit/LayoutTests/xr/xrView_match.html
index 2d7de532..a0715b2 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrView_match.html
+++ b/third_party/WebKit/LayoutTests/xr/xrView_match.html
@@ -1,34 +1,34 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
-vr_session_test( (t, session, mockService) => {
+xr_session_test( (t, session, mockService) => {
   // Session must have a baseLayer or frame requests will be ignored.
-  let webglLayer = new VRWebGLLayer(session, gl);
+  let webglLayer = new XRWebGLLayer(session, gl);
   session.baseLayer = webglLayer;
 
   session.requestFrameOfReference("eyeLevel").then((frameOfRef) => {
-    function onFrame(vrFrame) {
+    function onFrame(xrFrame) {
       t.step( () => {
         // Ensure that two views are provided.
-        assert_not_equals(vrFrame.views, null);
-        assert_equals(vrFrame.views.length, 2);
+        assert_not_equals(xrFrame.views, null);
+        assert_equals(xrFrame.views.length, 2);
 
-        let leftView = vrFrame.views[0];
-        let rightView = vrFrame.views[1];
+        let leftView = xrFrame.views[0];
+        let rightView = xrFrame.views[1];
 
         // Ensure that the views are the right type.
-        assert_true(leftView instanceof VRView);
-        assert_true(rightView instanceof VRView);
+        assert_true(leftView instanceof XRView);
+        assert_true(rightView instanceof XRView);
 
         // Ensure that they have the expected eye enums.
         assert_equals(leftView.eye, "left");
@@ -48,13 +48,13 @@
 
         assert_matrices_approx_equal(leftView.projectionMatrix, expectedLeftProjection);
         assert_matrices_approx_equal(rightView.projectionMatrix, expectedRightProjection);
-      }, "VRView attributes match the expected values");
+      }, "XRView attributes match the expected values");
       t.done();
     }
 
     session.requestFrame(onFrame);
   });
 }, fakeDisplays["Pixel"], { exclusive: true },
-"VRPresentationFrame contains the expected views");
+"XRPresentationFrame contains the expected views");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrView_oneframeupdate.html b/third_party/WebKit/LayoutTests/xr/xrView_oneframeupdate.html
similarity index 80%
rename from third_party/WebKit/LayoutTests/vr/latest/vrView_oneframeupdate.html
rename to third_party/WebKit/LayoutTests/xr/xrView_oneframeupdate.html
index 96b9a433..469c2e5 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrView_oneframeupdate.html
+++ b/third_party/WebKit/LayoutTests/xr/xrView_oneframeupdate.html
@@ -1,29 +1,29 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
 let displayLeftEye = fakeDisplays["Pixel"].leftEye;
 let displayRightEye = fakeDisplays["Pixel"].rightEye;
 
-vr_session_test( (t, session, mockService) => {
+xr_session_test( (t, session, mockService) => {
   // Session must have a baseLayer or frame requests will be ignored.
-  session.baseLayer = new VRWebGLLayer(session, gl);
+  session.baseLayer = new XRWebGLLayer(session, gl);
 
   session.requestFrameOfReference("eyeLevel").then((frameOfRef) => {
     let counter = 0;
 
-    function onFrame(vrFrame) {
-      let leftView = vrFrame.views[0];
-      let rightView = vrFrame.views[1];
+    function onFrame(xrFrame) {
+      let leftView = xrFrame.views[0];
+      let rightView = xrFrame.views[1];
 
       if (counter == 0) {
         session.requestFrame(onFrame);
@@ -69,6 +69,6 @@
     session.requestFrame(onFrame);
   });
 }, fakeDisplays["Pixel"], { exclusive: true },
-"VRView projection matrices update near and far depths on the next frame");
+"XRView projection matrices update near and far depths on the next frame");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrViewport_valid.html b/third_party/WebKit/LayoutTests/xr/xrViewport_valid.html
similarity index 74%
rename from third_party/WebKit/LayoutTests/vr/latest/vrViewport_valid.html
rename to third_party/WebKit/LayoutTests/xr/xrViewport_valid.html
index ad25633b..dd83bd3 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrViewport_valid.html
+++ b/third_party/WebKit/LayoutTests/xr/xrViewport_valid.html
@@ -1,33 +1,33 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
-vr_session_test( (t, session, mockService) => {
+xr_session_test( (t, session, mockService) => {
   // Session must have a baseLayer or frame requests will be ignored.
-  let webglLayer = new VRWebGLLayer(session, gl);
+  let webglLayer = new XRWebGLLayer(session, gl);
   session.baseLayer = webglLayer;
 
   session.requestFrameOfReference("eyeLevel").then((frameOfRef) => {
-    function onFrame(vrFrame) {
-      let leftView = vrFrame.views[0];
-      let rightView = vrFrame.views[1];
+    function onFrame(xrFrame) {
+      let leftView = xrFrame.views[0];
+      let rightView = xrFrame.views[1];
 
       let leftViewport = leftView.getViewport(webglLayer);
       let rightViewport = rightView.getViewport(webglLayer);
 
       // Ensure the views report the expected viewports into the WebGL layer.
       t.step( () => {
-        assert_true(leftViewport instanceof VRViewport);
-        assert_true(rightViewport instanceof VRViewport);
+        assert_true(leftViewport instanceof XRViewport);
+        assert_true(rightViewport instanceof XRViewport);
 
         assert_not_equals(leftViewport, null);
         assert_not_equals(rightViewport, null);
@@ -58,13 +58,13 @@
         // Assumes that the left viewport will always be physically to the left
         // of the right viewport.
         assert_less_than_equal(leftViewport.x + leftViewport.width, rightViewport.x);
-      }, "VRViewports do not overlap");
+      }, "XRViewports do not overlap");
       t.done();
     }
 
     session.requestFrame(onFrame);
   });
 }, fakeDisplays["Pixel"], { exclusive: true },
-"VRViewport attributes are valid");
+"XRViewport attributes are valid");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrWebGLLayer_framebuffer_draw.html b/third_party/WebKit/LayoutTests/xr/xrWebGLLayer_framebuffer_draw.html
similarity index 79%
rename from third_party/WebKit/LayoutTests/vr/latest/vrWebGLLayer_framebuffer_draw.html
rename to third_party/WebKit/LayoutTests/xr/xrWebGLLayer_framebuffer_draw.html
index ee66b87..2640136 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrWebGLLayer_framebuffer_draw.html
+++ b/third_party/WebKit/LayoutTests/xr/xrWebGLLayer_framebuffer_draw.html
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
@@ -31,7 +31,7 @@
   return program;
 }
 
-vr_session_test( (t, session, mockService) => {
+xr_session_test( (t, session, mockService) => {
   // Setup simple WebGL geometry to draw with.
   let program = setupProgram(gl,
     "attribute vec4 vPosition; void main() { gl_Position = vPosition; }",
@@ -49,17 +49,17 @@
   gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([ 0, 1, 2]), gl.STATIC_DRAW);
 
   // Session must have a baseLayer or frame requests will be ignored.
-  let webglLayer = new VRWebGLLayer(session, gl);
+  let webglLayer = new XRWebGLLayer(session, gl);
   session.baseLayer = webglLayer;
 
-  let vrFramebuffer = webglLayer.framebuffer;
+  let xrFramebuffer = webglLayer.framebuffer;
 
   function runDrawTests(t, expectedError) {
     t.step( () => {
       // Make sure we're starting with a clean error slate.
       assert_equals(gl.getError(), gl.NO_ERROR);
 
-      gl.bindFramebuffer(gl.FRAMEBUFFER, vrFramebuffer);
+      gl.bindFramebuffer(gl.FRAMEBUFFER, xrFramebuffer);
       assert_equals(gl.getError(), gl.NO_ERROR);
     }, "Framebuffer must be bindable");
 
@@ -82,16 +82,16 @@
     }, `Test drawElements, expect ${expectedError}`);
   }
 
-  // Drawing operations outside of a VR frame should fail.
+  // Drawing operations outside of a XR frame should fail.
   runDrawTests(t, "INVALID_FRAMEBUFFER_OPERATION");
 
-  // Drawing operations within a VR frame should succeed.
-  session.requestFrame((vrFrame) => {
+  // Drawing operations within a XR frame should succeed.
+  session.requestFrame((xrFrame) => {
     runDrawTests(t, "NO_ERROR");
     t.done();
   });
 
 }, fakeDisplays["Pixel"], { exclusive: true },
-"Ensure a WebGL layer's framebuffer can only be drawn to inside a VR frame");
+"Ensure a WebGL layer's framebuffer can only be drawn to inside a XR frame");
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/vr/latest/vrWebGLLayer_opaque_framebuffer.html b/third_party/WebKit/LayoutTests/xr/xrWebGLLayer_opaque_framebuffer.html
similarity index 80%
rename from third_party/WebKit/LayoutTests/vr/latest/vrWebGLLayer_opaque_framebuffer.html
rename to third_party/WebKit/LayoutTests/xr/xrWebGLLayer_opaque_framebuffer.html
index 8c5ae6e..202b98bd 100644
--- a/third_party/WebKit/LayoutTests/vr/latest/vrWebGLLayer_opaque_framebuffer.html
+++ b/third_party/WebKit/LayoutTests/xr/xrWebGLLayer_opaque_framebuffer.html
@@ -1,42 +1,42 @@
 <!DOCTYPE html>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../resources/fake-vr-displays.js"></script>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="../vr/resources/fake-vr-displays.js"></script>
 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
 <script src="file:///gen/device/vr/vr_service.mojom.js"></script>
-<script src="../resources/mock-vr-service.js"></script>
-<script src="../resources/test-constants.js"></script>
+<script src="../vr/resources/mock-vr-service.js"></script>
+<script src="../vr/resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
-<script src="../resources/presentation-setup.js"></script>
+<script src="../vr/resources/presentation-setup.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
 
-vr_session_test( (t, session, mockService) => {
+xr_session_test( (t, session, mockService) => {
   // Session must have a baseLayer or frame requests will be ignored.
-  let webglLayer = new VRWebGLLayer(session, gl);
+  let webglLayer = new XRWebGLLayer(session, gl);
   session.baseLayer = webglLayer;
 
-  let vrFramebuffer = webglLayer.framebuffer;
+  let xrFramebuffer = webglLayer.framebuffer;
 
   t.step( () => {
     // Make sure we're starting with a clean error slate.
     assert_equals(gl.getError(), gl.NO_ERROR);
 
-    assert_not_equals(vrFramebuffer, null);
+    assert_not_equals(xrFramebuffer, null);
     assert_greater_than(webglLayer.framebufferWidth, 0);
     assert_greater_than(webglLayer.framebufferHeight, 0);
 
-    gl.bindFramebuffer(gl.FRAMEBUFFER, vrFramebuffer);
+    gl.bindFramebuffer(gl.FRAMEBUFFER, xrFramebuffer);
     assert_equals(gl.getError(), gl.NO_ERROR);
   }, "Framebuffer must be non-null, non-zero size, bindable.");
 
   t.step( () => {
-    gl.deleteFramebuffer(vrFramebuffer);
+    gl.deleteFramebuffer(xrFramebuffer);
     assert_equals(gl.getError(), gl.INVALID_OPERATION);
 
     // Make sure the framebuffer is still bound after failed attempt to delete.
     let boundFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
-    assert_equals(vrFramebuffer, boundFramebuffer);
+    assert_equals(xrFramebuffer, boundFramebuffer);
     assert_equals(gl.getError(), gl.NO_ERROR);
   }, "Ensure the framebuffer cannot be deleted");
 
@@ -93,12 +93,12 @@
 
   t.step( () => {
     assert_equals(gl.checkFramebufferStatus(gl.FRAMEBUFFER), gl.FRAMEBUFFER_UNSUPPORTED);
-  }, "Framebuffer status must be unsupported outside of a VR frame callback");
+  }, "Framebuffer status must be unsupported outside of a XR frame callback");
 
-  session.requestFrame((vrFrame) => {
+  session.requestFrame((xrFrame) => {
     t.step( () => {
       assert_equals(gl.checkFramebufferStatus(gl.FRAMEBUFFER), gl.FRAMEBUFFER_COMPLETE);
-    }, "Framebuffer status must be complete inside of a VR frame callback");
+    }, "Framebuffer status must be complete inside of a XR frame callback");
 
     t.done();
   });
diff --git a/third_party/WebKit/Source/bindings/modules/BUILD.gn b/third_party/WebKit/Source/bindings/modules/BUILD.gn
index cc39640..4443a9e 100644
--- a/third_party/WebKit/Source/bindings/modules/BUILD.gn
+++ b/third_party/WebKit/Source/bindings/modules/BUILD.gn
@@ -54,14 +54,14 @@
     "//third_party/WebKit/Source/modules/speech/SpeechSynthesisEvent.idl",
     "//third_party/WebKit/Source/modules/storage/StorageEvent.idl",
     "//third_party/WebKit/Source/modules/vr/VRDisplayEvent.idl",
-    "//third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.idl",
-    "//third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.idl",
     "//third_party/WebKit/Source/modules/webaudio/AudioProcessingEvent.idl",
     "//third_party/WebKit/Source/modules/webaudio/OfflineAudioCompletionEvent.idl",
     "//third_party/WebKit/Source/modules/webgl/WebGLContextEvent.idl",
     "//third_party/WebKit/Source/modules/webmidi/MIDIConnectionEvent.idl",
     "//third_party/WebKit/Source/modules/webmidi/MIDIMessageEvent.idl",
     "//third_party/WebKit/Source/modules/websockets/CloseEvent.idl",
+    "//third_party/WebKit/Source/modules/xr/XRDeviceEvent.idl",
+    "//third_party/WebKit/Source/modules/xr/XRSessionEvent.idl",
   ]
   output_file = "event_modules_names.json5"
   suffix = "Modules"
diff --git a/third_party/WebKit/Source/bindings/modules/v8/generated.gni b/third_party/WebKit/Source/bindings/modules/v8/generated.gni
index 357c8b5..af45f24 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/generated.gni
+++ b/third_party/WebKit/Source/bindings/modules/v8/generated.gni
@@ -105,8 +105,8 @@
   "$bindings_modules_v8_output_dir/v8_position_error_callback.h",
   "$bindings_modules_v8_output_dir/v8_remote_playback_availability_callback.cc",
   "$bindings_modules_v8_output_dir/v8_remote_playback_availability_callback.h",
-  "$bindings_modules_v8_output_dir/v8_vr_frame_request_callback.cc",
-  "$bindings_modules_v8_output_dir/v8_vr_frame_request_callback.h",
+  "$bindings_modules_v8_output_dir/v8_xr_frame_request_callback.cc",
+  "$bindings_modules_v8_output_dir/v8_xr_frame_request_callback.h",
 ]
 
 bindings_generated_v8_context_snapshot_external_references_file =
diff --git a/third_party/WebKit/Source/modules/BUILD.gn b/third_party/WebKit/Source/modules/BUILD.gn
index 291e8749..19eb45f 100644
--- a/third_party/WebKit/Source/modules/BUILD.gn
+++ b/third_party/WebKit/Source/modules/BUILD.gn
@@ -160,6 +160,7 @@
     "//third_party/WebKit/Source/modules/webshare",
     "//third_party/WebKit/Source/modules/websockets",
     "//third_party/WebKit/Source/modules/webusb",
+    "//third_party/WebKit/Source/modules/xr",
     "//third_party/icu",
     "//third_party/sqlite",
     "//third_party/zlib",
diff --git a/third_party/WebKit/Source/modules/event_target_modules_names.json5 b/third_party/WebKit/Source/modules/event_target_modules_names.json5
index 6c490b9..3713fd9 100644
--- a/third_party/WebKit/Source/modules/event_target_modules_names.json5
+++ b/third_party/WebKit/Source/modules/event_target_modules_names.json5
@@ -45,14 +45,14 @@
     "modules/speech/SpeechSynthesis",
     "modules/speech/SpeechSynthesisUtterance",
     "modules/vr/VRDisplay",
-    "modules/vr/latest/VR",
-    "modules/vr/latest/VRDevice",
-    "modules/vr/latest/VRSession",
     "modules/webaudio/AudioContext",
     "modules/webaudio/AudioNode",
     "modules/webmidi/MIDIAccess",
     "modules/webmidi/MIDIInput",
     "modules/webmidi/MIDIPort",
+    "modules/xr/XR",
+    "modules/xr/XRDevice",
+    "modules/xr/XRSession",
     {
       name: "modules/websockets/WebSocket",
       ImplementedAs: "DOMWebSocket",
diff --git a/third_party/WebKit/Source/modules/modules_idl_files.gni b/third_party/WebKit/Source/modules/modules_idl_files.gni
index 40aab5c..925c67b 100644
--- a/third_party/WebKit/Source/modules/modules_idl_files.gni
+++ b/third_party/WebKit/Source/modules/modules_idl_files.gni
@@ -301,21 +301,6 @@
           "vr/VRFrameData.idl",
           "vr/VRPose.idl",
           "vr/VRStageParameters.idl",
-          "vr/latest/VR.idl",
-          "vr/latest/VRCoordinateSystem.idl",
-          "vr/latest/VRDevice.idl",
-          "vr/latest/VRDevicePose.idl",
-          "vr/latest/VRDeviceEvent.idl",
-          "vr/latest/VRFrameOfReference.idl",
-          "vr/latest/VRLayer.idl",
-          "vr/latest/VRPresentationFrame.idl",
-          "vr/latest/VRSession.idl",
-          "vr/latest/VRSessionEvent.idl",
-          "vr/latest/VRStageBounds.idl",
-          "vr/latest/VRStageBoundsPoint.idl",
-          "vr/latest/VRView.idl",
-          "vr/latest/VRViewport.idl",
-          "vr/latest/VRWebGLLayer.idl",
           "webaudio/AnalyserNode.idl",
           "webaudio/AudioBuffer.idl",
           "webaudio/AudioBufferSourceNode.idl",
@@ -434,11 +419,26 @@
           "webusb/USBIsochronousOutTransferPacket.idl",
           "webusb/USBIsochronousOutTransferResult.idl",
           "webusb/USBOutTransferResult.idl",
+          "xr/XR.idl",
+          "xr/XRCoordinateSystem.idl",
+          "xr/XRDevice.idl",
+          "xr/XRDevicePose.idl",
+          "xr/XRDeviceEvent.idl",
+          "xr/XRFrameOfReference.idl",
+          "xr/XRLayer.idl",
+          "xr/XRPresentationFrame.idl",
+          "xr/XRSession.idl",
+          "xr/XRSessionEvent.idl",
+          "xr/XRStageBounds.idl",
+          "xr/XRStageBoundsPoint.idl",
+          "xr/XRView.idl",
+          "xr/XRViewport.idl",
+          "xr/XRWebGLLayer.idl",
         ],
         "abspath")
 
 modules_callback_function_idl_files =
-    get_path_info([ "vr/latest/VRFrameRequestCallback.idl" ], "abspath")
+    get_path_info([ "xr/XRFrameRequestCallback.idl" ], "abspath")
 
 modules_dictionary_idl_files =
     get_path_info([
@@ -586,11 +586,6 @@
                     "storage/StorageEventInit.idl",
                     "vr/VRDisplayEventInit.idl",
                     "vr/VRLayerInit.idl",
-                    "vr/latest/VRDeviceEventInit.idl",
-                    "vr/latest/VRFrameOfReferenceOptions.idl",
-                    "vr/latest/VRSessionCreationOptions.idl",
-                    "vr/latest/VRSessionEventInit.idl",
-                    "vr/latest/VRWebGLLayerInit.idl",
                     "webaudio/AnalyserOptions.idl",
                     "webaudio/AudioBufferOptions.idl",
                     "webaudio/AudioBufferSourceOptions.idl",
@@ -630,6 +625,11 @@
                     "webusb/USBControlTransferParameters.idl",
                     "webusb/USBDeviceFilter.idl",
                     "webusb/USBDeviceRequestOptions.idl",
+                    "xr/XRDeviceEventInit.idl",
+                    "xr/XRFrameOfReferenceOptions.idl",
+                    "xr/XRSessionCreationOptions.idl",
+                    "xr/XRSessionEventInit.idl",
+                    "xr/XRWebGLLayerInit.idl",
                   ],
                   "abspath")
 
diff --git a/third_party/WebKit/Source/modules/vr/BUILD.gn b/third_party/WebKit/Source/modules/vr/BUILD.gn
index 3b0ee8a..d00089e6 100644
--- a/third_party/WebKit/Source/modules/vr/BUILD.gn
+++ b/third_party/WebKit/Source/modules/vr/BUILD.gn
@@ -26,40 +26,6 @@
     "VRPose.h",
     "VRStageParameters.cpp",
     "VRStageParameters.h",
-    "latest/VR.cpp",
-    "latest/VR.h",
-    "latest/VRCoordinateSystem.cpp",
-    "latest/VRCoordinateSystem.h",
-    "latest/VRDevice.cpp",
-    "latest/VRDevice.h",
-    "latest/VRDeviceEvent.cpp",
-    "latest/VRDeviceEvent.h",
-    "latest/VRDevicePose.cpp",
-    "latest/VRDevicePose.h",
-    "latest/VRFrameOfReference.cpp",
-    "latest/VRFrameOfReference.h",
-    "latest/VRFrameProvider.cpp",
-    "latest/VRFrameProvider.h",
-    "latest/VRFrameRequestCallbackCollection.cpp",
-    "latest/VRFrameRequestCallbackCollection.h",
-    "latest/VRLayer.cpp",
-    "latest/VRLayer.h",
-    "latest/VRPresentationFrame.cpp",
-    "latest/VRPresentationFrame.h",
-    "latest/VRSession.cpp",
-    "latest/VRSession.h",
-    "latest/VRSessionEvent.cpp",
-    "latest/VRSessionEvent.h",
-    "latest/VRStageBounds.cpp",
-    "latest/VRStageBounds.h",
-    "latest/VRStageBoundsPoint.h",
-    "latest/VRView.cpp",
-    "latest/VRView.h",
-    "latest/VRViewport.h",
-    "latest/VRWebGLDrawingBuffer.cpp",
-    "latest/VRWebGLDrawingBuffer.h",
-    "latest/VRWebGLLayer.cpp",
-    "latest/VRWebGLLayer.h",
   ]
 
   deps = [
diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp
index befb48f..4283e05 100644
--- a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp
+++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp
@@ -19,7 +19,7 @@
 #include "modules/vr/VRDisplay.h"
 #include "modules/vr/VRGetDevicesCallback.h"
 #include "modules/vr/VRPose.h"
-#include "modules/vr/latest/VR.h"
+#include "modules/xr/XR.h"
 #include "platform/feature_policy/FeaturePolicy.h"
 #include "platform/wtf/PtrUtil.h"
 #include "public/platform/Platform.h"
@@ -39,7 +39,7 @@
     "The object is no longer associated with a document.";
 
 const char kCannotUseBothNewAndOldAPIMessage[] =
-    "Cannot use navigator.getVRDisplays if the latest VR API is already in "
+    "Cannot use navigator.getVRDisplays if the XR API is already in "
     "use.";
 
 }  // namespace
@@ -61,21 +61,21 @@
   return *supplement;
 }
 
-VR* NavigatorVR::vr(Navigator& navigator) {
+XR* NavigatorVR::xr(Navigator& navigator) {
   // Always return null when the navigator is detached.
   if (!navigator.GetFrame())
     return nullptr;
 
-  return NavigatorVR::From(navigator).vr();
+  return NavigatorVR::From(navigator).xr();
 }
 
-VR* NavigatorVR::vr() {
+XR* NavigatorVR::xr() {
   LocalFrame* frame = GetSupplementable()->GetFrame();
   // Always return null when the navigator is detached.
   if (!frame)
     return nullptr;
 
-  if (!vr_) {
+  if (!xr_) {
     // For the sake of simplicity we're going to block developers from using the
     // new API if they've already made calls to the legacy API.
     if (controller_) {
@@ -87,9 +87,9 @@
       return nullptr;
     }
 
-    vr_ = VR::Create(*frame);
+    xr_ = XR::Create(*frame);
   }
-  return vr_;
+  return xr_;
 }
 
 ScriptPromise NavigatorVR::getVRDisplays(ScriptState* script_state,
@@ -134,7 +134,7 @@
 
   // Similar to the restriciton above, we're going to block developers from
   // using the legacy API if they've already made calls to the new API.
-  if (vr_) {
+  if (xr_) {
     return ScriptPromise::RejectWithDOMException(
         script_state, DOMException::Create(kInvalidStateError,
                                            kCannotUseBothNewAndOldAPIMessage));
@@ -176,7 +176,7 @@
 }
 
 void NavigatorVR::Trace(blink::Visitor* visitor) {
-  visitor->Trace(vr_);
+  visitor->Trace(xr_);
   visitor->Trace(controller_);
   Supplement<Navigator>::Trace(visitor);
 }
@@ -225,7 +225,7 @@
 void NavigatorVR::DidAddEventListener(LocalDOMWindow* window,
                                       const AtomicString& event_type) {
   // Don't bother if we're using the newer API
-  if (vr_)
+  if (xr_)
     return;
 
   if (event_type == EventTypeNames::vrdisplayactivate) {
@@ -241,7 +241,7 @@
 void NavigatorVR::DidRemoveEventListener(LocalDOMWindow* window,
                                          const AtomicString& event_type) {
   // Don't bother if we're using the newer API
-  if (vr_)
+  if (xr_)
     return;
 
   if (event_type == EventTypeNames::vrdisplayactivate &&
@@ -252,7 +252,7 @@
 }
 
 void NavigatorVR::DidRemoveAllEventListeners(LocalDOMWindow* window) {
-  if (vr_ || !controller_)
+  if (xr_ || !controller_)
     return;
 
   controller_->SetListeningForActivate(false);
diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.h b/third_party/WebKit/Source/modules/vr/NavigatorVR.h
index c9f78aae..ffae86f 100644
--- a/third_party/WebKit/Source/modules/vr/NavigatorVR.h
+++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.h
@@ -20,7 +20,7 @@
 
 class Document;
 class Navigator;
-class VR;
+class XR;
 class VRController;
 
 class MODULES_EXPORT NavigatorVR final
@@ -36,9 +36,11 @@
   static NavigatorVR& From(Navigator&);
   ~NavigatorVR() override;
 
-  // Latest API
-  static VR* vr(Navigator&);
-  VR* vr();
+  // XR API
+  // TODO(offenwanger) Should eventually move this out into it's own separate
+  // Navigator supplement.
+  static XR* xr(Navigator&);
+  XR* xr();
 
   // Legacy API
   static ScriptPromise getVRDisplays(ScriptState*, Navigator&);
@@ -74,7 +76,7 @@
 
   void FireVRDisplayPresentChange(VRDisplay*);
 
-  Member<VR> vr_;
+  Member<XR> xr_;
   Member<VRController> controller_;
 
   // Whether this page is listening for vrdisplayactivate event.
diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.idl b/third_party/WebKit/Source/modules/vr/NavigatorVR.idl
index c6ce9d8..e4b9311 100644
--- a/third_party/WebKit/Source/modules/vr/NavigatorVR.idl
+++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.idl
@@ -7,7 +7,7 @@
     ImplementedAs=NavigatorVR
 ] partial interface Navigator {
     // Latest API
-    [SecureContext, RuntimeEnabled=WebXR] readonly attribute VR vr;
+    [SecureContext, RuntimeEnabled=WebXR] readonly attribute XR xr;
 
     // Legacy API
     [OriginTrialEnabled=WebVR, CallWith=ScriptState] Promise getVRDisplays();
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.idl b/third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.idl
deleted file mode 100644
index 7f1e7a6..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.idl
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrcoordinatesystem-interface
-[
-    SecureContext,
-    RuntimeEnabled=WebXR
-] interface VRCoordinateSystem {
-  Float32Array? getTransformTo(VRCoordinateSystem other);
-};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.cpp b/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.cpp
deleted file mode 100644
index 006bfe1..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "modules/vr/latest/VRDeviceEvent.h"
-
-namespace blink {
-
-VRDeviceEvent::VRDeviceEvent() {}
-
-VRDeviceEvent::VRDeviceEvent(const AtomicString& type, VRDevice* device)
-    : Event(type, true, false), device_(device) {}
-
-VRDeviceEvent::VRDeviceEvent(const AtomicString& type,
-                             const VRDeviceEventInit& initializer)
-    : Event(type, initializer) {
-  if (initializer.hasDevice())
-    device_ = initializer.device();
-}
-
-VRDeviceEvent::~VRDeviceEvent() {}
-
-const AtomicString& VRDeviceEvent::InterfaceName() const {
-  return EventNames::VRDeviceEvent;
-}
-
-void VRDeviceEvent::Trace(blink::Visitor* visitor) {
-  visitor->Trace(device_);
-  Event::Trace(visitor);
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.h b/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.h
deleted file mode 100644
index f3ddb54a..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef VRDeviceEvent_h
-#define VRDeviceEvent_h
-
-#include "modules/EventModules.h"
-#include "modules/vr/latest/VRDevice.h"
-#include "modules/vr/latest/VRDeviceEventInit.h"
-
-namespace blink {
-
-class VRDeviceEvent final : public Event {
-  DEFINE_WRAPPERTYPEINFO();
-
- public:
-  static VRDeviceEvent* Create() { return new VRDeviceEvent; }
-  static VRDeviceEvent* Create(const AtomicString& type, VRDevice* device) {
-    return new VRDeviceEvent(type, device);
-  }
-
-  static VRDeviceEvent* Create(const AtomicString& type,
-                               const VRDeviceEventInit& initializer) {
-    return new VRDeviceEvent(type, initializer);
-  }
-
-  ~VRDeviceEvent() override;
-
-  VRDevice* device() const { return device_.Get(); }
-
-  const AtomicString& InterfaceName() const override;
-
-  void Trace(blink::Visitor*) override;
-
- private:
-  VRDeviceEvent();
-  VRDeviceEvent(const AtomicString& type, VRDevice*);
-  VRDeviceEvent(const AtomicString&, const VRDeviceEventInit&);
-
-  Member<VRDevice> device_;
-};
-
-}  // namespace blink
-
-#endif  // VRDisplayEvent_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.idl b/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.idl
deleted file mode 100644
index 2d6b510..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRDeviceEvent.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrdeviceevent-interface
-[
-    SecureContext,
-    RuntimeEnabled=WebXR,
-    Constructor(DOMString type, VRDeviceEventInit eventInitDict)
-] interface VRDeviceEvent : Event {
-  readonly attribute VRDevice device;
-};
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDeviceEventInit.idl b/third_party/WebKit/Source/modules/vr/latest/VRDeviceEventInit.idl
deleted file mode 100644
index 9d005753..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRDeviceEventInit.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrdeviceevent-interface
-[
-    SecureContext
-] dictionary VRDeviceEventInit : EventInit {
-  required VRDevice device;
-};
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.idl b/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.idl
deleted file mode 100644
index 754044f5..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.idl
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrframeofreference-interface
-
-enum VRFrameOfReferenceType {
-  "headModel",
-  "eyeLevel",
-  "stage",
-};
-
-[
-    SecureContext,
-    RuntimeEnabled=WebXR
-] interface VRFrameOfReference : VRCoordinateSystem {
-  readonly attribute VRStageBounds? bounds;
-  readonly attribute double emulatedHeight;
-};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallback.idl b/third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallback.idl
deleted file mode 100644
index c5f799f4..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallback.idl
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrframerequestcallback
-callback VRFrameRequestCallback = void (VRPresentationFrame frame);
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallbackCollection.cpp b/third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallbackCollection.cpp
deleted file mode 100644
index e165d846..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallbackCollection.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "modules/vr/latest/VRFrameRequestCallbackCollection.h"
-
-#include "bindings/modules/v8/v8_vr_frame_request_callback.h"
-#include "core/inspector/InspectorTraceEvents.h"
-#include "core/probe/CoreProbes.h"
-#include "modules/vr/latest/VRPresentationFrame.h"
-#include "modules/vr/latest/VRSession.h"
-
-namespace blink {
-
-VRFrameRequestCallbackCollection::VRFrameRequestCallbackCollection(
-    ExecutionContext* context)
-    : context_(context) {}
-
-VRFrameRequestCallbackCollection::CallbackId
-VRFrameRequestCallbackCollection::RegisterCallback(
-    V8VRFrameRequestCallback* callback) {
-  CallbackId id = ++next_callback_id_;
-  callbacks_.Set(id, callback);
-  pending_callbacks_.push_back(id);
-
-  probe::AsyncTaskScheduledBreakable(context_, "VRRequestFrame", callback);
-  return id;
-}
-
-void VRFrameRequestCallbackCollection::CancelCallback(CallbackId id) {
-  if (IsValidCallbackId(id)) {
-    callbacks_.erase(id);
-  }
-}
-
-void VRFrameRequestCallbackCollection::ExecuteCallbacks(
-    VRSession* session,
-    VRPresentationFrame* frame) {
-  // First, generate a list of callbacks to consider.  Callbacks registered from
-  // this point on are considered only for the "next" frame, not this one.
-  DCHECK(callbacks_to_invoke_.IsEmpty());
-  callbacks_to_invoke_.swap(pending_callbacks_);
-
-  for (const auto& id : callbacks_to_invoke_) {
-    V8VRFrameRequestCallback* callback = callbacks_.Take(id);
-
-    // Callback won't be found if it was cancelled.
-    if (!callback)
-      continue;
-
-    probe::AsyncTask async_task(context_, callback);
-    probe::UserCallback probe(context_, "VRRequestFrame", AtomicString(), true);
-    callback->InvokeAndReportException(session, frame);
-  }
-
-  callbacks_to_invoke_.clear();
-}
-
-void VRFrameRequestCallbackCollection::Trace(blink::Visitor* visitor) {
-  visitor->Trace(callbacks_);
-  visitor->Trace(context_);
-}
-
-void VRFrameRequestCallbackCollection::TraceWrappers(
-    const blink::ScriptWrappableVisitor* visitor) const {
-  for (const auto& callback : callbacks_.Values()) {
-    visitor->TraceWrappers(callback);
-  }
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRLayer.cpp b/third_party/WebKit/Source/modules/vr/latest/VRLayer.cpp
deleted file mode 100644
index 081b354..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRLayer.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "modules/vr/latest/VRLayer.h"
-#include "modules/vr/latest/VRSession.h"
-
-namespace blink {
-
-VRLayer::VRLayer(VRSession* session, VRLayerType layer_type)
-    : session_(session), layer_type_(layer_type) {}
-
-VRViewport* VRLayer::GetViewport(VRView::Eye) {
-  return nullptr;
-}
-
-void VRLayer::OnFrameStart() {}
-void VRLayer::OnFrameEnd() {}
-void VRLayer::OnResize() {}
-
-void VRLayer::Trace(blink::Visitor* visitor) {
-  visitor->Trace(session_);
-  ScriptWrappable::Trace(visitor);
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRLayer.h b/third_party/WebKit/Source/modules/vr/latest/VRLayer.h
deleted file mode 100644
index b277c416..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRLayer.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef VRLayer_h
-#define VRLayer_h
-
-#include "modules/vr/latest/VRView.h"
-#include "platform/bindings/ScriptWrappable.h"
-#include "platform/heap/Handle.h"
-#include "platform/wtf/Forward.h"
-
-namespace blink {
-
-class VRSession;
-class VRViewport;
-
-enum VRLayerType { kVRWebGLLayerType };
-
-class VRLayer : public ScriptWrappable {
-  DEFINE_WRAPPERTYPEINFO();
-
- public:
-  VRLayer(VRSession*, VRLayerType);
-
-  VRSession* session() const { return session_; }
-  VRLayerType layerType() const { return layer_type_; }
-  virtual VRViewport* GetViewport(VRView::Eye);
-
-  virtual void OnFrameStart();
-  virtual void OnFrameEnd();
-  virtual void OnResize();
-
-  virtual void Trace(blink::Visitor*);
-
- private:
-  const Member<VRSession> session_;
-  VRLayerType layer_type_;
-};
-
-}  // namespace blink
-
-#endif  // VRLayer_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.idl b/third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.idl
deleted file mode 100644
index 977aa70..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.idl
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrpresentationframe-interface
-[
-    SecureContext,
-    RuntimeEnabled=WebXR
-] interface VRPresentationFrame {
-  readonly attribute VRSession session;
-  readonly attribute FrozenArray<VRView> views;
-
-  VRDevicePose? getDevicePose(VRCoordinateSystem coordinateSystem);
-};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRSession.idl b/third_party/WebKit/Source/modules/vr/latest/VRSession.idl
deleted file mode 100644
index 547571b..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRSession.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrsession-interface
-[
-    SecureContext,
-    RuntimeEnabled=WebXR
-] interface VRSession : EventTarget {
-  readonly attribute VRDevice device;
-  readonly attribute boolean exclusive;
-
-  attribute double depthNear;
-  attribute double depthFar;
-
-  attribute VRLayer baseLayer;
-
-  attribute EventHandler onblur;
-  attribute EventHandler onfocus;
-  attribute EventHandler onresetpose;
-  attribute EventHandler onend;
-
-  [CallWith=ScriptState] Promise<VRFrameOfReference> requestFrameOfReference(VRFrameOfReferenceType type, [PermissiveDictionaryConversion] optional VRFrameOfReferenceOptions options);
-
-  long requestFrame(VRFrameRequestCallback callback);
-  void cancelFrame(long handle);
-
-  [CallWith=ScriptState] Promise<void> end();
-};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.cpp b/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.cpp
deleted file mode 100644
index 470c161..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "modules/vr/latest/VRSessionEvent.h"
-
-namespace blink {
-
-VRSessionEvent::VRSessionEvent() {}
-
-VRSessionEvent::VRSessionEvent(const AtomicString& type, VRSession* session)
-    : Event(type, true, false), session_(session) {}
-
-VRSessionEvent::VRSessionEvent(const AtomicString& type,
-                               const VRSessionEventInit& initializer)
-    : Event(type, initializer) {
-  if (initializer.hasSession())
-    session_ = initializer.session();
-}
-
-VRSessionEvent::~VRSessionEvent() {}
-
-const AtomicString& VRSessionEvent::InterfaceName() const {
-  return EventNames::VRSessionEvent;
-}
-
-void VRSessionEvent::Trace(blink::Visitor* visitor) {
-  visitor->Trace(session_);
-  Event::Trace(visitor);
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.h b/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.h
deleted file mode 100644
index 1445af6..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef VRSessionEvent_h
-#define VRSessionEvent_h
-
-#include "modules/EventModules.h"
-#include "modules/vr/latest/VRSession.h"
-#include "modules/vr/latest/VRSessionEventInit.h"
-
-namespace blink {
-
-class VRSessionEvent final : public Event {
-  DEFINE_WRAPPERTYPEINFO();
-
- public:
-  static VRSessionEvent* Create() { return new VRSessionEvent; }
-  static VRSessionEvent* Create(const AtomicString& type, VRSession* session) {
-    return new VRSessionEvent(type, session);
-  }
-
-  static VRSessionEvent* Create(const AtomicString& type,
-                                const VRSessionEventInit& initializer) {
-    return new VRSessionEvent(type, initializer);
-  }
-
-  ~VRSessionEvent() override;
-
-  VRSession* session() const { return session_.Get(); }
-
-  const AtomicString& InterfaceName() const override;
-
-  void Trace(blink::Visitor*) override;
-
- private:
-  VRSessionEvent();
-  VRSessionEvent(const AtomicString& type, VRSession*);
-  VRSessionEvent(const AtomicString& type, const VRSessionEventInit&);
-
-  Member<VRSession> session_;
-};
-
-}  // namespace blink
-
-#endif  // VRDisplayEvent_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.idl b/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.idl
deleted file mode 100644
index ebc7423..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRSessionEvent.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrsessionevent-interface
-[
-    SecureContext,
-    RuntimeEnabled=WebXR,
-    Constructor(DOMString type, VRSessionEventInit eventInitDict)
-] interface VRSessionEvent : Event {
-  readonly attribute VRSession session;
-};
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRSessionEventInit.idl b/third_party/WebKit/Source/modules/vr/latest/VRSessionEventInit.idl
deleted file mode 100644
index fc46fe2..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRSessionEventInit.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrsessionevent-interface
-[
-    SecureContext
-] dictionary VRSessionEventInit : EventInit {
-  required VRSession session;
-};
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRStageBounds.h b/third_party/WebKit/Source/modules/vr/latest/VRStageBounds.h
deleted file mode 100644
index d41bb7c..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRStageBounds.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef VRStageBounds_h
-#define VRStageBounds_h
-
-#include "modules/vr/latest/VRStageBoundsPoint.h"
-#include "platform/bindings/ScriptWrappable.h"
-#include "platform/heap/Handle.h"
-#include "platform/wtf/Forward.h"
-
-namespace blink {
-
-class VRStageBounds final : public ScriptWrappable {
-  DEFINE_WRAPPERTYPEINFO();
-
- public:
-  VRStageBounds() = default;
-
-  HeapVector<Member<VRStageBoundsPoint>> geometry() const { return geometry_; }
-
-  virtual void Trace(blink::Visitor*);
-
- private:
-  HeapVector<Member<VRStageBoundsPoint>> geometry_;
-};
-
-}  // namespace blink
-
-#endif  // VRStageBounds_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRStageBounds.idl b/third_party/WebKit/Source/modules/vr/latest/VRStageBounds.idl
deleted file mode 100644
index 974b0c8..0000000
--- a/third_party/WebKit/Source/modules/vr/latest/VRStageBounds.idl
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://w3c.github.io/webvr/spec/latest/#vrstagebounds-interface
-[
-    SecureContext,
-    RuntimeEnabled=WebXR
-] interface VRStageBounds {
-  readonly attribute FrozenArray<VRStageBoundsPoint> geometry;
-};
diff --git a/third_party/WebKit/Source/modules/xr/BUILD.gn b/third_party/WebKit/Source/modules/xr/BUILD.gn
new file mode 100644
index 0000000..1595b6b
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/BUILD.gn
@@ -0,0 +1,48 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//third_party/WebKit/Source/modules/modules.gni")
+
+blink_modules_sources("xr") {
+  sources = [
+    "XR.cpp",
+    "XR.h",
+    "XRCoordinateSystem.cpp",
+    "XRCoordinateSystem.h",
+    "XRDevice.cpp",
+    "XRDevice.h",
+    "XRDeviceEvent.cpp",
+    "XRDeviceEvent.h",
+    "XRDevicePose.cpp",
+    "XRDevicePose.h",
+    "XRFrameOfReference.cpp",
+    "XRFrameOfReference.h",
+    "XRFrameProvider.cpp",
+    "XRFrameProvider.h",
+    "XRFrameRequestCallbackCollection.cpp",
+    "XRFrameRequestCallbackCollection.h",
+    "XRLayer.cpp",
+    "XRLayer.h",
+    "XRPresentationFrame.cpp",
+    "XRPresentationFrame.h",
+    "XRSession.cpp",
+    "XRSession.h",
+    "XRSessionEvent.cpp",
+    "XRSessionEvent.h",
+    "XRStageBounds.cpp",
+    "XRStageBounds.h",
+    "XRStageBoundsPoint.h",
+    "XRView.cpp",
+    "XRView.h",
+    "XRViewport.h",
+    "XRWebGLDrawingBuffer.cpp",
+    "XRWebGLDrawingBuffer.h",
+    "XRWebGLLayer.cpp",
+    "XRWebGLLayer.h",
+  ]
+
+  deps = [
+    "//device/vr:mojo_bindings_blink",
+  ]
+}
diff --git a/third_party/WebKit/Source/modules/xr/DEPS b/third_party/WebKit/Source/modules/xr/DEPS
new file mode 100644
index 0000000..a3b0b3b7
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/DEPS
@@ -0,0 +1,8 @@
+include_rules = [
+    "+mojo/public/cpp/bindings/binding.h",
+    "+mojo/public/cpp/system/platform_handle.h",
+    "+device/vr/vr_service.mojom-blink.h",
+    "+gpu/command_buffer/client/gles2_interface.h",
+    "+gpu/command_buffer/common/mailbox_holder.h",
+    "+ui/gfx/geometry",
+]
diff --git a/third_party/WebKit/Source/modules/xr/OWNERS b/third_party/WebKit/Source/modules/xr/OWNERS
new file mode 100644
index 0000000..26c48a2
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/OWNERS
@@ -0,0 +1,4 @@
+bajones@chromium.org
+klausw@chromium.org
+
+# COMPONENT: Blink>WebVR
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/vr/latest/VR.cpp b/third_party/WebKit/Source/modules/xr/XR.cpp
similarity index 76%
rename from third_party/WebKit/Source/modules/vr/latest/VR.cpp
rename to third_party/WebKit/Source/modules/xr/XR.cpp
index bd1bcf5..fca07495 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VR.cpp
+++ b/third_party/WebKit/Source/modules/xr/XR.cpp
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VR.h"
+#include "modules/xr/XR.h"
 
 #include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "core/dom/DOMException.h"
 #include "core/dom/Document.h"
 #include "core/frame/LocalFrame.h"
 #include "modules/EventTargetModules.h"
-#include "modules/vr/latest/VRDevice.h"
-#include "modules/vr/latest/VRDeviceEvent.h"
+#include "modules/xr/XRDevice.h"
+#include "modules/xr/XRDeviceEvent.h"
 #include "platform/feature_policy/FeaturePolicy.h"
 #include "public/platform/InterfaceProvider.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
@@ -20,43 +20,43 @@
 namespace {
 
 const char kNavigatorDetachedError[] =
-    "The navigator.vr object is no longer associated with a document.";
+    "The navigator.xr object is no longer associated with a document.";
 
 const char kFeaturePolicyBlocked[] =
-    "Access to the feature \"vr\" is disallowed by feature policy.";
+    "Access to the feature \"xr\" is disallowed by feature policy.";
 
 const char kCrossOriginSubframeBlocked[] =
-    "Blocked call to navigator.vr.requestDevice inside a cross-origin "
+    "Blocked call to navigator.xr.requestDevice inside a cross-origin "
     "iframe because the frame has never been activated by the user.";
 
 }  // namespace
 
-VR::VR(LocalFrame& frame)
+XR::XR(LocalFrame& frame)
     : ContextLifecycleObserver(frame.GetDocument()),
       devices_synced_(false),
       binding_(this) {
   frame.GetInterfaceProvider().GetInterface(mojo::MakeRequest(&service_));
   service_.set_connection_error_handler(
-      WTF::Bind(&VR::Dispose, WrapWeakPersistent(this)));
+      WTF::Bind(&XR::Dispose, WrapWeakPersistent(this)));
 
   device::mojom::blink::VRServiceClientPtr client;
   binding_.Bind(mojo::MakeRequest(&client));
 
   // Setting the client kicks off a request for the details of any connected
-  // VRDevices.
+  // XRDevices.
   service_->SetClient(std::move(client),
-                      WTF::Bind(&VR::OnDevicesSynced, WrapPersistent(this)));
+                      WTF::Bind(&XR::OnDevicesSynced, WrapPersistent(this)));
 }
 
-ExecutionContext* VR::GetExecutionContext() const {
+ExecutionContext* XR::GetExecutionContext() const {
   return ContextLifecycleObserver::GetExecutionContext();
 }
 
-const AtomicString& VR::InterfaceName() const {
-  return EventTargetNames::VR;
+const AtomicString& XR::InterfaceName() const {
+  return EventTargetNames::XR;
 }
 
-ScriptPromise VR::requestDevice(ScriptState* script_state) {
+ScriptPromise XR::requestDevice(ScriptState* script_state) {
   LocalFrame* frame = GetFrame();
   if (!frame) {
     // Reject if the frame is inaccessible.
@@ -89,7 +89,7 @@
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
   ScriptPromise promise = resolver->Promise();
 
-  // If we've previously synced the VRDevices or no longer have a valid service
+  // If we've previously synced the XRDevices or no longer have a valid service
   // connection just use the current list. In the case of the service being
   // disconnected this will be an empty array.
   if (!service_ || devices_synced_) {
@@ -107,33 +107,33 @@
   return promise;
 }
 
-// Each time a new VRDevice is connected we'll recieve a VRDisplayPtr for it
+// Each time a new XRDevice is connected we'll recieve a XRDisplayPtr for it
 // here. Upon calling SetClient in the constructor we should receive one call
-// for each VRDevice that was already connected at the time.
-void VR::OnDisplayConnected(
+// for each XRDevice that was already connected at the time.
+void XR::OnDisplayConnected(
     device::mojom::blink::VRMagicWindowProviderPtr magic_window_provider,
     device::mojom::blink::VRDisplayHostPtr display,
     device::mojom::blink::VRDisplayClientRequest client_request,
     device::mojom::blink::VRDisplayInfoPtr display_info) {
-  VRDevice* vr_device =
-      new VRDevice(this, std::move(magic_window_provider), std::move(display),
+  XRDevice* xr_device =
+      new XRDevice(this, std::move(magic_window_provider), std::move(display),
                    std::move(client_request), std::move(display_info));
 
-  devices_.push_back(vr_device);
+  devices_.push_back(xr_device);
 
   DispatchEvent(
-      VRDeviceEvent::Create(EventTypeNames::deviceconnect, vr_device));
+      XRDeviceEvent::Create(EventTypeNames::deviceconnect, xr_device));
 }
 
-// Called when the VRService has called OnDevicesConnected for all active
-// VRDevices.
-void VR::OnDevicesSynced() {
+// Called when the XRService has called OnDevicesConnected for all active
+// XRDevices.
+void XR::OnDevicesSynced() {
   devices_synced_ = true;
   ResolveRequestDevice();
 }
 
-// Called when details for every connected VRDevice has been received.
-void VR::ResolveRequestDevice() {
+// Called when details for every connected XRDevice has been received.
+void XR::ResolveRequestDevice() {
   if (pending_devices_resolver_) {
     devices_.size() == 0 ? pending_devices_resolver_->Resolve()
                          : pending_devices_resolver_->Resolve(devices_[0]);
@@ -141,11 +141,11 @@
   }
 }
 
-void VR::ContextDestroyed(ExecutionContext*) {
+void XR::ContextDestroyed(ExecutionContext*) {
   Dispose();
 }
 
-void VR::Dispose() {
+void XR::Dispose() {
   // If the document context was destroyed, shut down the client connection
   // and never call the mojo service again.
   service_.reset();
@@ -162,7 +162,7 @@
   ResolveRequestDevice();
 }
 
-void VR::Trace(blink::Visitor* visitor) {
+void XR::Trace(blink::Visitor* visitor) {
   visitor->Trace(devices_);
   visitor->Trace(pending_devices_resolver_);
   ContextLifecycleObserver::Trace(visitor);
diff --git a/third_party/WebKit/Source/modules/vr/latest/VR.h b/third_party/WebKit/Source/modules/xr/XR.h
similarity index 84%
rename from third_party/WebKit/Source/modules/vr/latest/VR.h
rename to third_party/WebKit/Source/modules/xr/XR.h
index 4e4679f7..350404f2 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VR.h
+++ b/third_party/WebKit/Source/modules/xr/XR.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VR_h
-#define VR_h
+#ifndef XR_h
+#define XR_h
 
 #include "bindings/core/v8/ScriptPromise.h"
 #include "core/dom/ContextLifecycleObserver.h"
@@ -17,23 +17,23 @@
 namespace blink {
 
 class ScriptPromiseResolver;
-class VRDevice;
+class XRDevice;
 
-class VR final : public EventTargetWithInlineData,
+class XR final : public EventTargetWithInlineData,
                  public ContextLifecycleObserver,
                  public device::mojom::blink::VRServiceClient {
   DEFINE_WRAPPERTYPEINFO();
-  USING_GARBAGE_COLLECTED_MIXIN(VR);
+  USING_GARBAGE_COLLECTED_MIXIN(XR);
 
  public:
-  static VR* Create(LocalFrame& frame) { return new VR(frame); }
+  static XR* Create(LocalFrame& frame) { return new XR(frame); }
 
   DEFINE_ATTRIBUTE_EVENT_LISTENER(deviceconnect);
   DEFINE_ATTRIBUTE_EVENT_LISTENER(devicedisconnect);
 
   ScriptPromise requestDevice(ScriptState*);
 
-  // VRServiceClient overrides.
+  // XRServiceClient overrides.
   void OnDisplayConnected(device::mojom::blink::VRMagicWindowProviderPtr,
                           device::mojom::blink::VRDisplayHostPtr,
                           device::mojom::blink::VRDisplayClientRequest,
@@ -51,14 +51,14 @@
   void Trace(blink::Visitor*) override;
 
  private:
-  explicit VR(LocalFrame& frame);
+  explicit XR(LocalFrame& frame);
 
   void OnDevicesSynced();
   void ResolveRequestDevice();
 
   bool devices_synced_;
 
-  HeapVector<Member<VRDevice>> devices_;
+  HeapVector<Member<XRDevice>> devices_;
   Member<ScriptPromiseResolver> pending_devices_resolver_;
   device::mojom::blink::VRServicePtr service_;
   mojo::Binding<device::mojom::blink::VRServiceClient> binding_;
@@ -66,4 +66,4 @@
 
 }  // namespace blink
 
-#endif  // VR_h
+#endif  // XR_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VR.idl b/third_party/WebKit/Source/modules/xr/XR.idl
similarity index 78%
rename from third_party/WebKit/Source/modules/vr/latest/VR.idl
rename to third_party/WebKit/Source/modules/xr/XR.idl
index 3eb3b7c..a7a9eff3 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VR.idl
+++ b/third_party/WebKit/Source/modules/xr/XR.idl
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vr-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xr-interface
 [
     SecureContext,
     RuntimeEnabled=WebXR
-] interface VR : EventTarget {
+] interface XR : EventTarget {
   attribute EventHandler ondeviceconnect;
   attribute EventHandler ondevicedisconnect;
 
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.cpp b/third_party/WebKit/Source/modules/xr/XRCoordinateSystem.cpp
similarity index 70%
rename from third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.cpp
rename to third_party/WebKit/Source/modules/xr/XRCoordinateSystem.cpp
index f71e10b7..f39fb5fb 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRCoordinateSystem.cpp
@@ -2,21 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRCoordinateSystem.h"
+#include "modules/xr/XRCoordinateSystem.h"
 
-#include "modules/vr/latest/VRSession.h"
+#include "modules/xr/XRSession.h"
 
 namespace blink {
 
-VRCoordinateSystem::VRCoordinateSystem(VRSession* session)
+XRCoordinateSystem::XRCoordinateSystem(XRSession* session)
     : session_(session) {}
 
-VRCoordinateSystem::~VRCoordinateSystem() {}
+XRCoordinateSystem::~XRCoordinateSystem() {}
 
 // If possible, get the matrix required to transform between two coordinate
 // systems.
-DOMFloat32Array* VRCoordinateSystem::getTransformTo(
-    VRCoordinateSystem* other) const {
+DOMFloat32Array* XRCoordinateSystem::getTransformTo(
+    XRCoordinateSystem* other) const {
   if (session_ != other->session()) {
     // Cannot get relationships between coordinate systems that belong to
     // different sessions.
@@ -29,7 +29,7 @@
   return nullptr;
 }
 
-void VRCoordinateSystem::Trace(blink::Visitor* visitor) {
+void XRCoordinateSystem::Trace(blink::Visitor* visitor) {
   visitor->Trace(session_);
   ScriptWrappable::Trace(visitor);
 }
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.h b/third_party/WebKit/Source/modules/xr/XRCoordinateSystem.h
similarity index 62%
rename from third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.h
rename to third_party/WebKit/Source/modules/xr/XRCoordinateSystem.h
index 7e25850..0c3a347 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRCoordinateSystem.h
+++ b/third_party/WebKit/Source/modules/xr/XRCoordinateSystem.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRCoordinateSystem_h
-#define VRCoordinateSystem_h
+#ifndef XRCoordinateSystem_h
+#define XRCoordinateSystem_h
 
 #include "core/typed_arrays/DOMTypedArray.h"
 #include "platform/bindings/ScriptWrappable.h"
@@ -13,18 +13,18 @@
 namespace blink {
 
 class TransformationMatrix;
-class VRSession;
+class XRSession;
 
-class VRCoordinateSystem : public ScriptWrappable {
+class XRCoordinateSystem : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  explicit VRCoordinateSystem(VRSession*);
-  virtual ~VRCoordinateSystem();
+  explicit XRCoordinateSystem(XRSession*);
+  virtual ~XRCoordinateSystem();
 
-  DOMFloat32Array* getTransformTo(VRCoordinateSystem*) const;
+  DOMFloat32Array* getTransformTo(XRCoordinateSystem*) const;
 
-  VRSession* session() { return session_; }
+  XRSession* session() { return session_; }
 
   virtual std::unique_ptr<TransformationMatrix> TransformBasePose(
       const TransformationMatrix& base_pose) = 0;
@@ -32,9 +32,9 @@
   virtual void Trace(blink::Visitor*);
 
  private:
-  const Member<VRSession> session_;
+  const Member<XRSession> session_;
 };
 
 }  // namespace blink
 
-#endif  // VRWebGLLayer_h
+#endif  // XRWebGLLayer_h
diff --git a/third_party/WebKit/Source/modules/xr/XRCoordinateSystem.idl b/third_party/WebKit/Source/modules/xr/XRCoordinateSystem.idl
new file mode 100644
index 0000000..dc32784
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRCoordinateSystem.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://immersive-web.github.io/webxr/spec/latest/#xrcoordinatesystem-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebXR
+] interface XRCoordinateSystem {
+  Float32Array? getTransformTo(XRCoordinateSystem other);
+};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDevice.cpp b/third_party/WebKit/Source/modules/xr/XRDevice.cpp
similarity index 73%
rename from third_party/WebKit/Source/modules/vr/latest/VRDevice.cpp
rename to third_party/WebKit/Source/modules/xr/XRDevice.cpp
index 1a4bf17..d0cc1be6 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRDevice.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRDevice.cpp
@@ -2,58 +2,58 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRDevice.h"
+#include "modules/xr/XRDevice.h"
 
 #include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "core/dom/DOMException.h"
 #include "core/frame/Frame.h"
 #include "core/frame/LocalFrame.h"
 #include "modules/EventTargetModules.h"
-#include "modules/vr/latest/VR.h"
-#include "modules/vr/latest/VRFrameProvider.h"
-#include "modules/vr/latest/VRSession.h"
+#include "modules/xr/XR.h"
+#include "modules/xr/XRFrameProvider.h"
+#include "modules/xr/XRSession.h"
 
 namespace blink {
 
 namespace {
 
 const char kActiveExclusiveSession[] =
-    "VRDevice already has an active, exclusive session";
+    "XRDevice already has an active, exclusive session";
 
 const char kExclusiveNotSupported[] =
-    "VRDevice does not support the creation of exclusive sessions.";
+    "XRDevice does not support the creation of exclusive sessions.";
 
 const char kNonExclusiveNotSupported[] =
-    "VRDevice does not support the creation of non-exclusive sessions.";
+    "XRDevice does not support the creation of non-exclusive sessions.";
 
 const char kRequestNotInUserGesture[] =
     "Exclusive sessions can only be requested during a user gesture.";
 
 }  // namespace
 
-VRDevice::VRDevice(
-    VR* vr,
+XRDevice::XRDevice(
+    XR* xr,
     device::mojom::blink::VRMagicWindowProviderPtr magic_window_provider,
     device::mojom::blink::VRDisplayHostPtr display,
     device::mojom::blink::VRDisplayClientRequest client_request,
     device::mojom::blink::VRDisplayInfoPtr display_info)
-    : vr_(vr),
+    : xr_(xr),
       magic_window_provider_(std::move(magic_window_provider)),
       display_(std::move(display)),
       display_client_binding_(this, std::move(client_request)) {
-  SetVRDisplayInfo(std::move(display_info));
+  SetXRDisplayInfo(std::move(display_info));
 }
 
-ExecutionContext* VRDevice::GetExecutionContext() const {
-  return vr_->GetExecutionContext();
+ExecutionContext* XRDevice::GetExecutionContext() const {
+  return xr_->GetExecutionContext();
 }
 
-const AtomicString& VRDevice::InterfaceName() const {
-  return EventTargetNames::VRDevice;
+const AtomicString& XRDevice::InterfaceName() const {
+  return EventTargetNames::XRDevice;
 }
 
-const char* VRDevice::checkSessionSupport(
-    const VRSessionCreationOptions& options) const {
+const char* XRDevice::checkSessionSupport(
+    const XRSessionCreationOptions& options) const {
   if (options.exclusive()) {
     // Validation for exclusive sessions.
     if (!supports_exclusive_) {
@@ -68,9 +68,9 @@
   return nullptr;
 }
 
-ScriptPromise VRDevice::supportsSession(
+ScriptPromise XRDevice::supportsSession(
     ScriptState* script_state,
-    const VRSessionCreationOptions& options) const {
+    const XRSessionCreationOptions& options) const {
   // Check to see if the device is capable of supporting the requested session
   // options. Note that reporting support here does not guarantee that creating
   // a session with those options will succeed, as other external and
@@ -90,9 +90,9 @@
   return promise;
 }
 
-ScriptPromise VRDevice::requestSession(
+ScriptPromise XRDevice::requestSession(
     ScriptState* script_state,
-    const VRSessionCreationOptions& options) {
+    const XRSessionCreationOptions& options) {
   // Check first to see if the device is capable of supporting the requested
   // options.
   const char* reject_reason = checkSessionSupport(options);
@@ -121,7 +121,7 @@
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
   ScriptPromise promise = resolver->Promise();
 
-  VRSession* session = new VRSession(this, options.exclusive());
+  XRSession* session = new XRSession(this, options.exclusive());
 
   if (options.exclusive()) {
     frameProvider()->BeginExclusiveSession(session, resolver);
@@ -133,28 +133,28 @@
 }
 
 // TODO: Forward these calls on to the sessions once they've been implemented.
-void VRDevice::OnChanged(device::mojom::blink::VRDisplayInfoPtr display_info) {
-  SetVRDisplayInfo(std::move(display_info));
+void XRDevice::OnChanged(device::mojom::blink::VRDisplayInfoPtr display_info) {
+  SetXRDisplayInfo(std::move(display_info));
 }
-void VRDevice::OnExitPresent() {}
-void VRDevice::OnBlur() {}
-void VRDevice::OnFocus() {}
-void VRDevice::OnActivate(device::mojom::blink::VRDisplayEventReason,
+void XRDevice::OnExitPresent() {}
+void XRDevice::OnBlur() {}
+void XRDevice::OnFocus() {}
+void XRDevice::OnActivate(device::mojom::blink::VRDisplayEventReason,
                           OnActivateCallback on_handled) {}
-void VRDevice::OnDeactivate(device::mojom::blink::VRDisplayEventReason) {}
+void XRDevice::OnDeactivate(device::mojom::blink::VRDisplayEventReason) {}
 
-VRFrameProvider* VRDevice::frameProvider() {
+XRFrameProvider* XRDevice::frameProvider() {
   if (!frame_provider_)
-    frame_provider_ = new VRFrameProvider(this);
+    frame_provider_ = new XRFrameProvider(this);
 
   return frame_provider_;
 }
 
-void VRDevice::Dispose() {
+void XRDevice::Dispose() {
   display_client_binding_.Close();
 }
 
-void VRDevice::SetVRDisplayInfo(
+void XRDevice::SetXRDisplayInfo(
     device::mojom::blink::VRDisplayInfoPtr display_info) {
   display_info_ = std::move(display_info);
   device_name_ = display_info_->displayName;
@@ -162,8 +162,8 @@
   supports_exclusive_ = (display_info_->capabilities->canPresent);
 }
 
-void VRDevice::Trace(blink::Visitor* visitor) {
-  visitor->Trace(vr_);
+void XRDevice::Trace(blink::Visitor* visitor) {
+  visitor->Trace(xr_);
   visitor->Trace(frame_provider_);
   EventTargetWithInlineData::Trace(visitor);
 }
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDevice.h b/third_party/WebKit/Source/modules/xr/XRDevice.h
similarity index 72%
rename from third_party/WebKit/Source/modules/vr/latest/VRDevice.h
rename to third_party/WebKit/Source/modules/xr/XRDevice.h
index 2c14f0b..385d1aa 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRDevice.h
+++ b/third_party/WebKit/Source/modules/xr/XRDevice.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRDevice_h
-#define VRDevice_h
+#ifndef XRDevice_h
+#define XRDevice_h
 
 #include "bindings/core/v8/ScriptPromise.h"
 #include "core/dom/events/EventTarget.h"
 #include "device/vr/vr_service.mojom-blink.h"
-#include "modules/vr/latest/VRSessionCreationOptions.h"
+#include "modules/xr/XRSessionCreationOptions.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "platform/heap/Handle.h"
 #include "platform/wtf/Forward.h"
@@ -16,33 +16,33 @@
 
 namespace blink {
 
-class VR;
-class VRFrameProvider;
+class XR;
+class XRFrameProvider;
 
-class VRDevice final : public EventTargetWithInlineData,
+class XRDevice final : public EventTargetWithInlineData,
                        public device::mojom::blink::VRDisplayClient {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  VRDevice(VR*,
+  XRDevice(XR*,
            device::mojom::blink::VRMagicWindowProviderPtr,
            device::mojom::blink::VRDisplayHostPtr,
            device::mojom::blink::VRDisplayClientRequest,
            device::mojom::blink::VRDisplayInfoPtr);
-  VR* vr() const { return vr_; }
+  XR* xr() const { return xr_; }
 
   const String& deviceName() const { return device_name_; }
   bool isExternal() const { return is_external_; }
 
   ScriptPromise supportsSession(ScriptState*,
-                                const VRSessionCreationOptions&) const;
-  ScriptPromise requestSession(ScriptState*, const VRSessionCreationOptions&);
+                                const XRSessionCreationOptions&) const;
+  ScriptPromise requestSession(ScriptState*, const XRSessionCreationOptions&);
 
   // EventTarget overrides.
   ExecutionContext* GetExecutionContext() const override;
   const AtomicString& InterfaceName() const override;
 
-  // VRDisplayClient
+  // XRDisplayClient
   void OnChanged(device::mojom::blink::VRDisplayInfoPtr) override;
   void OnExitPresent() override;
   void OnBlur() override;
@@ -51,30 +51,30 @@
                   OnActivateCallback on_handled) override;
   void OnDeactivate(device::mojom::blink::VRDisplayEventReason) override;
 
-  VRFrameProvider* frameProvider();
+  XRFrameProvider* frameProvider();
 
   void Dispose();
 
-  const device::mojom::blink::VRDisplayHostPtr& vrDisplayHostPtr() const {
+  const device::mojom::blink::VRDisplayHostPtr& xrDisplayHostPtr() const {
     return display_;
   }
   const device::mojom::blink::VRMagicWindowProviderPtr&
-  vrMagicWindowProviderPtr() const {
+  xrMagicWindowProviderPtr() const {
     return magic_window_provider_;
   }
-  const device::mojom::blink::VRDisplayInfoPtr& vrDisplayInfoPtr() const {
+  const device::mojom::blink::VRDisplayInfoPtr& xrDisplayInfoPtr() const {
     return display_info_;
   }
 
   void Trace(blink::Visitor*) override;
 
  private:
-  void SetVRDisplayInfo(device::mojom::blink::VRDisplayInfoPtr);
+  void SetXRDisplayInfo(device::mojom::blink::VRDisplayInfoPtr);
 
-  const char* checkSessionSupport(const VRSessionCreationOptions&) const;
+  const char* checkSessionSupport(const XRSessionCreationOptions&) const;
 
-  Member<VR> vr_;
-  Member<VRFrameProvider> frame_provider_;
+  Member<XR> xr_;
+  Member<XRFrameProvider> frame_provider_;
   String device_name_;
   bool is_external_;
   bool supports_exclusive_;
@@ -88,4 +88,4 @@
 
 }  // namespace blink
 
-#endif  // VRDevice_h
+#endif  // XRDevice_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDevice.idl b/third_party/WebKit/Source/modules/xr/XRDevice.idl
similarity index 64%
rename from third_party/WebKit/Source/modules/vr/latest/VRDevice.idl
rename to third_party/WebKit/Source/modules/xr/XRDevice.idl
index ae72864..72830f9 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRDevice.idl
+++ b/third_party/WebKit/Source/modules/xr/XRDevice.idl
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrdevice-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrdevice-interface
 [
     SecureContext,
     RuntimeEnabled=WebXR
-] interface VRDevice : EventTarget {
+] interface XRDevice : EventTarget {
   readonly attribute DOMString deviceName;
   readonly attribute boolean isExternal;
 
-  [CallWith=ScriptState] Promise supportsSession([PermissiveDictionaryConversion] optional VRSessionCreationOptions options);
-  [CallWith=ScriptState] Promise requestSession([PermissiveDictionaryConversion] optional VRSessionCreationOptions options);
+  [CallWith=ScriptState] Promise supportsSession([PermissiveDictionaryConversion] optional XRSessionCreationOptions options);
+  [CallWith=ScriptState] Promise requestSession([PermissiveDictionaryConversion] optional XRSessionCreationOptions options);
 };
diff --git a/third_party/WebKit/Source/modules/xr/XRDeviceEvent.cpp b/third_party/WebKit/Source/modules/xr/XRDeviceEvent.cpp
new file mode 100644
index 0000000..7473a97
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRDeviceEvent.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/xr/XRDeviceEvent.h"
+
+namespace blink {
+
+XRDeviceEvent::XRDeviceEvent() {}
+
+XRDeviceEvent::XRDeviceEvent(const AtomicString& type, XRDevice* device)
+    : Event(type, true, false), device_(device) {}
+
+XRDeviceEvent::XRDeviceEvent(const AtomicString& type,
+                             const XRDeviceEventInit& initializer)
+    : Event(type, initializer) {
+  if (initializer.hasDevice())
+    device_ = initializer.device();
+}
+
+XRDeviceEvent::~XRDeviceEvent() {}
+
+const AtomicString& XRDeviceEvent::InterfaceName() const {
+  return EventNames::XRDeviceEvent;
+}
+
+void XRDeviceEvent::Trace(blink::Visitor* visitor) {
+  visitor->Trace(device_);
+  Event::Trace(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/xr/XRDeviceEvent.h b/third_party/WebKit/Source/modules/xr/XRDeviceEvent.h
new file mode 100644
index 0000000..ddf4ac8
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRDeviceEvent.h
@@ -0,0 +1,46 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef XRDeviceEvent_h
+#define XRDeviceEvent_h
+
+#include "modules/EventModules.h"
+#include "modules/xr/XRDevice.h"
+#include "modules/xr/XRDeviceEventInit.h"
+
+namespace blink {
+
+class XRDeviceEvent final : public Event {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  static XRDeviceEvent* Create() { return new XRDeviceEvent; }
+  static XRDeviceEvent* Create(const AtomicString& type, XRDevice* device) {
+    return new XRDeviceEvent(type, device);
+  }
+
+  static XRDeviceEvent* Create(const AtomicString& type,
+                               const XRDeviceEventInit& initializer) {
+    return new XRDeviceEvent(type, initializer);
+  }
+
+  ~XRDeviceEvent() override;
+
+  XRDevice* device() const { return device_.Get(); }
+
+  const AtomicString& InterfaceName() const override;
+
+  void Trace(blink::Visitor*) override;
+
+ private:
+  XRDeviceEvent();
+  XRDeviceEvent(const AtomicString& type, XRDevice*);
+  XRDeviceEvent(const AtomicString&, const XRDeviceEventInit&);
+
+  Member<XRDevice> device_;
+};
+
+}  // namespace blink
+
+#endif  // XRDisplayEvent_h
diff --git a/third_party/WebKit/Source/modules/xr/XRDeviceEvent.idl b/third_party/WebKit/Source/modules/xr/XRDeviceEvent.idl
new file mode 100644
index 0000000..cab15ad
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRDeviceEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/webxr/spec/latest/#xrdeviceevent-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebXR,
+    Constructor(DOMString type, XRDeviceEventInit eventInitDict)
+] interface XRDeviceEvent : Event {
+  readonly attribute XRDevice device;
+};
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/xr/XRDeviceEventInit.idl b/third_party/WebKit/Source/modules/xr/XRDeviceEventInit.idl
new file mode 100644
index 0000000..7ba5a0f
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRDeviceEventInit.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// TODO(offenwanger) Remove this interface.
+[
+    SecureContext
+] dictionary XRDeviceEventInit : EventInit {
+  required XRDevice device;
+};
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDevicePose.cpp b/third_party/WebKit/Source/modules/xr/XRDevicePose.cpp
similarity index 83%
rename from third_party/WebKit/Source/modules/vr/latest/VRDevicePose.cpp
rename to third_party/WebKit/Source/modules/xr/XRDevicePose.cpp
index 0816b69..9139590d 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRDevicePose.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRDevicePose.cpp
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRDevicePose.h"
+#include "modules/xr/XRDevicePose.h"
 
-#include "modules/vr/latest/VRSession.h"
-#include "modules/vr/latest/VRView.h"
+#include "modules/xr/XRSession.h"
+#include "modules/xr/XRView.h"
 
 namespace blink {
 
@@ -28,18 +28,18 @@
 
 }  // namespace
 
-VRDevicePose::VRDevicePose(
-    VRSession* session,
+XRDevicePose::XRDevicePose(
+    XRSession* session,
     std::unique_ptr<TransformationMatrix> pose_model_matrix)
     : session_(session), pose_model_matrix_(std::move(pose_model_matrix)) {}
 
-DOMFloat32Array* VRDevicePose::poseModelMatrix() const {
+DOMFloat32Array* XRDevicePose::poseModelMatrix() const {
   if (!pose_model_matrix_)
     return nullptr;
   return transformationMatrixToFloat32Array(*pose_model_matrix_);
 }
 
-DOMFloat32Array* VRDevicePose::getViewMatrix(VRView* view) {
+DOMFloat32Array* XRDevicePose::getViewMatrix(XRView* view) {
   if (view->session() != session_)
     return nullptr;
 
@@ -57,7 +57,7 @@
   return transformationMatrixToFloat32Array(view_matrix);
 }
 
-void VRDevicePose::Trace(blink::Visitor* visitor) {
+void XRDevicePose::Trace(blink::Visitor* visitor) {
   visitor->Trace(session_);
   ScriptWrappable::Trace(visitor);
 }
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDevicePose.h b/third_party/WebKit/Source/modules/xr/XRDevicePose.h
similarity index 66%
rename from third_party/WebKit/Source/modules/vr/latest/VRDevicePose.h
rename to third_party/WebKit/Source/modules/xr/XRDevicePose.h
index 0661a1d6..9d3d80aa9 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRDevicePose.h
+++ b/third_party/WebKit/Source/modules/xr/XRDevicePose.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRDevicePose_h
-#define VRDevicePose_h
+#ifndef XRDevicePose_h
+#define XRDevicePose_h
 
 #include "core/typed_arrays/DOMTypedArray.h"
 #include "platform/bindings/ScriptWrappable.h"
@@ -12,25 +12,25 @@
 
 namespace blink {
 
-class VRSession;
-class VRView;
+class XRSession;
+class XRView;
 
-class VRDevicePose final : public ScriptWrappable {
+class XRDevicePose final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  VRDevicePose(VRSession*, std::unique_ptr<TransformationMatrix>);
+  XRDevicePose(XRSession*, std::unique_ptr<TransformationMatrix>);
 
   DOMFloat32Array* poseModelMatrix() const;
-  DOMFloat32Array* getViewMatrix(VRView*);
+  DOMFloat32Array* getViewMatrix(XRView*);
 
   virtual void Trace(blink::Visitor*);
 
  private:
-  const Member<VRSession> session_;
+  const Member<XRSession> session_;
   std::unique_ptr<TransformationMatrix> pose_model_matrix_;
 };
 
 }  // namespace blink
 
-#endif  // VRWebGLLayer_h
+#endif  // XRWebGLLayer_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRDevicePose.idl b/third_party/WebKit/Source/modules/xr/XRDevicePose.idl
similarity index 64%
rename from third_party/WebKit/Source/modules/vr/latest/VRDevicePose.idl
rename to third_party/WebKit/Source/modules/xr/XRDevicePose.idl
index 4ca5374..0958125 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRDevicePose.idl
+++ b/third_party/WebKit/Source/modules/xr/XRDevicePose.idl
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrdevicepose-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrdevicepose-interface
 [
     SecureContext,
     RuntimeEnabled=WebXR
-] interface VRDevicePose {
+] interface XRDevicePose {
   readonly attribute Float32Array poseModelMatrix;
 
-  Float32Array getViewMatrix(VRView view);
+  Float32Array getViewMatrix(XRView view);
 };
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.cpp b/third_party/WebKit/Source/modules/xr/XRFrameOfReference.cpp
similarity index 79%
rename from third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.cpp
rename to third_party/WebKit/Source/modules/xr/XRFrameOfReference.cpp
index 6f17b558..1410069 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRFrameOfReference.cpp
@@ -2,37 +2,37 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRFrameOfReference.h"
+#include "modules/xr/XRFrameOfReference.h"
 
-#include "modules/vr/latest/VRStageBounds.h"
+#include "modules/xr/XRStageBounds.h"
 
 namespace blink {
 
 // Rough estimate of avg human eye height in meters.
 const double kDefaultEmulationHeight = 1.6;
 
-VRFrameOfReference::VRFrameOfReference(VRSession* session, Type type)
-    : VRCoordinateSystem(session), type_(type) {}
+XRFrameOfReference::XRFrameOfReference(XRSession* session, Type type)
+    : XRCoordinateSystem(session), type_(type) {}
 
-VRFrameOfReference::~VRFrameOfReference() {}
+XRFrameOfReference::~XRFrameOfReference() {}
 
-void VRFrameOfReference::UpdatePoseTransform(
+void XRFrameOfReference::UpdatePoseTransform(
     std::unique_ptr<TransformationMatrix> transform) {
   pose_transform_ = std::move(transform);
 }
 
-void VRFrameOfReference::UpdateStageBounds(VRStageBounds* bounds) {
+void XRFrameOfReference::UpdateStageBounds(XRStageBounds* bounds) {
   bounds_ = bounds;
   // TODO(bajones): Fire a boundschange event
 }
 
 // Enables emulated height when using a stage frame of reference, which should
 // only be used if the sytem does not have a native concept of how far above the
-// floor the VRDevice is at any given moment. This applies a static vertical
+// floor the XRDevice is at any given moment. This applies a static vertical
 // offset to the coordinate system so that the user feels approximately like
 // they are standing on a floor plane located at Y = 0. An explicit offset in
 // meters can be given if the page has specific needs.
-void VRFrameOfReference::UseEmulatedHeight(double value) {
+void XRFrameOfReference::UseEmulatedHeight(double value) {
   if (value == 0.0) {
     value = kDefaultEmulationHeight;
   }
@@ -41,11 +41,11 @@
   pose_transform_->Translate3d(0, emulatedHeight_, 0);
 }
 
-// Transforms a given pose from a "base" coordinate system used by the VR
+// Transforms a given pose from a "base" coordinate system used by the XR
 // service to the frame of reference's coordinate system. This model is a bit
 // over-simplified and will need to be made more robust when we start dealing
 // with world-scale 6DoF tracking.
-std::unique_ptr<TransformationMatrix> VRFrameOfReference::TransformBasePose(
+std::unique_ptr<TransformationMatrix> XRFrameOfReference::TransformBasePose(
     const TransformationMatrix& base_pose) {
   switch (type_) {
     case kTypeHeadModel: {
@@ -81,9 +81,9 @@
   return nullptr;
 }
 
-void VRFrameOfReference::Trace(blink::Visitor* visitor) {
+void XRFrameOfReference::Trace(blink::Visitor* visitor) {
   visitor->Trace(bounds_);
-  VRCoordinateSystem::Trace(visitor);
+  XRCoordinateSystem::Trace(visitor);
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.h b/third_party/WebKit/Source/modules/xr/XRFrameOfReference.h
similarity index 66%
rename from third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.h
rename to third_party/WebKit/Source/modules/xr/XRFrameOfReference.h
index f02490ff..67a9edb3 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReference.h
+++ b/third_party/WebKit/Source/modules/xr/XRFrameOfReference.h
@@ -2,33 +2,33 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRFrameOfReference_h
-#define VRFrameOfReference_h
+#ifndef XRFrameOfReference_h
+#define XRFrameOfReference_h
 
-#include "modules/vr/latest/VRCoordinateSystem.h"
+#include "modules/xr/XRCoordinateSystem.h"
 #include "platform/transforms/TransformationMatrix.h"
 
 namespace blink {
 
-class VRStageBounds;
+class XRStageBounds;
 
-class VRFrameOfReference final : public VRCoordinateSystem {
+class XRFrameOfReference final : public XRCoordinateSystem {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
   enum Type { kTypeHeadModel, kTypeEyeLevel, kTypeStage };
 
-  VRFrameOfReference(VRSession*, Type);
-  ~VRFrameOfReference() override;
+  XRFrameOfReference(XRSession*, Type);
+  ~XRFrameOfReference() override;
 
   void UpdatePoseTransform(std::unique_ptr<TransformationMatrix>);
-  void UpdateStageBounds(VRStageBounds*);
+  void UpdateStageBounds(XRStageBounds*);
   void UseEmulatedHeight(double value);
 
   std::unique_ptr<TransformationMatrix> TransformBasePose(
       const TransformationMatrix& base_pose) override;
 
-  VRStageBounds* bounds() const { return bounds_; }
+  XRStageBounds* bounds() const { return bounds_; }
   double emulatedHeight() const { return emulatedHeight_; }
 
   Type type() const { return type_; }
@@ -36,7 +36,7 @@
   void Trace(blink::Visitor*) override;
 
  private:
-  Member<VRStageBounds> bounds_;
+  Member<XRStageBounds> bounds_;
   double emulatedHeight_ = 0.0;
   Type type_;
   std::unique_ptr<TransformationMatrix> pose_transform_;
@@ -44,4 +44,4 @@
 
 }  // namespace blink
 
-#endif  // VRWebGLLayer_h
+#endif  // XRWebGLLayer_h
diff --git a/third_party/WebKit/Source/modules/xr/XRFrameOfReference.idl b/third_party/WebKit/Source/modules/xr/XRFrameOfReference.idl
new file mode 100644
index 0000000..2a751c1
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRFrameOfReference.idl
@@ -0,0 +1,19 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://immersive-web.github.io/webxr/spec/latest/#xrframeofreference-interface
+
+enum XRFrameOfReferenceType {
+  "headModel",
+  "eyeLevel",
+  "stage",
+};
+
+[
+    SecureContext,
+    RuntimeEnabled=WebXR
+] interface XRFrameOfReference : XRCoordinateSystem {
+  readonly attribute XRStageBounds? bounds;
+  readonly attribute double emulatedHeight;
+};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReferenceOptions.idl b/third_party/WebKit/Source/modules/xr/XRFrameOfReferenceOptions.idl
similarity index 68%
rename from third_party/WebKit/Source/modules/vr/latest/VRFrameOfReferenceOptions.idl
rename to third_party/WebKit/Source/modules/xr/XRFrameOfReferenceOptions.idl
index 7939bd85..e1bf41d7 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameOfReferenceOptions.idl
+++ b/third_party/WebKit/Source/modules/xr/XRFrameOfReferenceOptions.idl
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrframeofreference-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrframeofreference-interface
 [
     SecureContext
-] dictionary VRFrameOfReferenceOptions {
+] dictionary XRFrameOfReferenceOptions {
   boolean disableStageEmulation = false;
   double stageEmulationHeight = 0.0;
 };
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameProvider.cpp b/third_party/WebKit/Source/modules/xr/XRFrameProvider.cpp
similarity index 75%
rename from third_party/WebKit/Source/modules/vr/latest/VRFrameProvider.cpp
rename to third_party/WebKit/Source/modules/xr/XRFrameProvider.cpp
index c7ae964..53ac15dd 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameProvider.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRFrameProvider.cpp
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRFrameProvider.h"
+#include "modules/xr/XRFrameProvider.h"
 
 #include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "core/dom/DOMException.h"
 #include "core/dom/Document.h"
 #include "core/dom/FrameRequestCallbackCollection.h"
 #include "core/frame/LocalFrame.h"
-#include "modules/vr/latest/VR.h"
-#include "modules/vr/latest/VRDevice.h"
-#include "modules/vr/latest/VRSession.h"
+#include "modules/xr/XR.h"
+#include "modules/xr/XRDevice.h"
+#include "modules/xr/XRSession.h"
 #include "platform/WebTaskRunner.h"
 #include "platform/instrumentation/tracing/TraceEvent.h"
 #include "platform/transforms/TransformationMatrix.h"
@@ -22,12 +22,12 @@
 
 namespace {
 
-class VRFrameProviderRequestCallback
+class XRFrameProviderRequestCallback
     : public FrameRequestCallbackCollection::FrameCallback {
  public:
-  explicit VRFrameProviderRequestCallback(VRFrameProvider* frame_provider)
+  explicit XRFrameProviderRequestCallback(XRFrameProvider* frame_provider)
       : frame_provider_(frame_provider) {}
-  ~VRFrameProviderRequestCallback() override {}
+  ~XRFrameProviderRequestCallback() override {}
   void Invoke(double high_res_time_ms) override {
     // TODO(bajones): Eventually exclusive vsyncs won't be handled here.
     if (frame_provider_->exclusive_session()) {
@@ -43,7 +43,7 @@
     FrameRequestCallbackCollection::FrameCallback::Trace(visitor);
   }
 
-  Member<VRFrameProvider> frame_provider_;
+  Member<XRFrameProvider> frame_provider_;
 };
 
 std::unique_ptr<TransformationMatrix> getPoseMatrix(
@@ -84,9 +84,9 @@
 
 }  // namespace
 
-VRFrameProvider::VRFrameProvider(VRDevice* device) : device_(device) {}
+XRFrameProvider::XRFrameProvider(XRDevice* device) : device_(device) {}
 
-void VRFrameProvider::BeginExclusiveSession(VRSession* session,
+void XRFrameProvider::BeginExclusiveSession(XRSession* session,
                                             ScriptPromiseResolver* resolver) {
   // Make sure the session is indeed an exclusive one.
   DCHECK(session && session->exclusive());
@@ -98,12 +98,12 @@
 
   pending_exclusive_session_resolver_ = resolver;
 
-  // TODO(bajones): Request a VRPresentationProviderPtr to use for presenting
+  // TODO(bajones): Request a XRPresentationProviderPtr to use for presenting
   // frames, delay call to OnPresentComplete till the connection is established.
   OnPresentComplete(true);
 }
 
-void VRFrameProvider::OnPresentComplete(bool success) {
+void XRFrameProvider::OnPresentComplete(bool success) {
   if (success) {
     pending_exclusive_session_resolver_->Resolve(exclusive_session_);
   } else {
@@ -111,7 +111,7 @@
 
     if (pending_exclusive_session_resolver_) {
       DOMException* exception = DOMException::Create(
-          kNotAllowedError, "Request for exclusive VRSession was denied.");
+          kNotAllowedError, "Request for exclusive XRSession was denied.");
       pending_exclusive_session_resolver_->Reject(exception);
     }
   }
@@ -120,11 +120,11 @@
 }
 
 // Called by the exclusive session when it is ended.
-void VRFrameProvider::OnExclusiveSessionEnded() {
+void XRFrameProvider::OnExclusiveSessionEnded() {
   if (!exclusive_session_)
     return;
 
-  // TODO(bajones): Call device_->vrDisplayHostPtr()->ExitPresent();
+  // TODO(bajones): Call device_->xrDisplayHostPtr()->ExitPresent();
 
   exclusive_session_ = nullptr;
   pending_exclusive_vsync_ = false;
@@ -137,8 +137,8 @@
     ScheduleNonExclusiveFrame();
 }
 
-// Schedule a session to be notified when the next VR frame is available.
-void VRFrameProvider::RequestFrame(VRSession* session) {
+// Schedule a session to be notified when the next XR frame is available.
+void XRFrameProvider::RequestFrame(XRSession* session) {
   DVLOG(2) << __FUNCTION__;
 
   // If a previous session has already requested a frame don't fire off another
@@ -157,13 +157,13 @@
   }
 }
 
-void VRFrameProvider::ScheduleExclusiveFrame() {
+void XRFrameProvider::ScheduleExclusiveFrame() {
   if (pending_exclusive_vsync_)
     return;
 
-  // TODO(bajones): This should acquire frames through a VRPresentationProvider
+  // TODO(bajones): This should acquire frames through a XRPresentationProvider
   // instead of duplicating the non-exclusive path.
-  LocalFrame* frame = device_->vr()->GetFrame();
+  LocalFrame* frame = device_->xr()->GetFrame();
   if (!frame)
     return;
 
@@ -173,16 +173,16 @@
 
   pending_exclusive_vsync_ = true;
 
-  device_->vrMagicWindowProviderPtr()->GetPose(WTF::Bind(
-      &VRFrameProvider::OnNonExclusivePose, WrapWeakPersistent(this)));
-  doc->RequestAnimationFrame(new VRFrameProviderRequestCallback(this));
+  device_->xrMagicWindowProviderPtr()->GetPose(WTF::Bind(
+      &XRFrameProvider::OnNonExclusivePose, WrapWeakPersistent(this)));
+  doc->RequestAnimationFrame(new XRFrameProviderRequestCallback(this));
 }
 
-void VRFrameProvider::ScheduleNonExclusiveFrame() {
+void XRFrameProvider::ScheduleNonExclusiveFrame() {
   if (pending_non_exclusive_vsync_)
     return;
 
-  LocalFrame* frame = device_->vr()->GetFrame();
+  LocalFrame* frame = device_->xr()->GetFrame();
   if (!frame)
     return;
 
@@ -192,12 +192,12 @@
 
   pending_non_exclusive_vsync_ = true;
 
-  device_->vrMagicWindowProviderPtr()->GetPose(WTF::Bind(
-      &VRFrameProvider::OnNonExclusivePose, WrapWeakPersistent(this)));
-  doc->RequestAnimationFrame(new VRFrameProviderRequestCallback(this));
+  device_->xrMagicWindowProviderPtr()->GetPose(WTF::Bind(
+      &XRFrameProvider::OnNonExclusivePose, WrapWeakPersistent(this)));
+  doc->RequestAnimationFrame(new XRFrameProviderRequestCallback(this));
 }
 
-void VRFrameProvider::OnExclusiveVSync(double timestamp) {
+void XRFrameProvider::OnExclusiveVSync(double timestamp) {
   DVLOG(2) << __FUNCTION__;
 
   pending_exclusive_vsync_ = false;
@@ -212,11 +212,11 @@
   // execution context caused extreme input delay due to processing
   // multiple frames without yielding, see crbug.com/701444.
   Platform::Current()->CurrentThread()->GetWebTaskRunner()->PostTask(
-      BLINK_FROM_HERE, WTF::Bind(&VRFrameProvider::ProcessScheduledFrame,
+      BLINK_FROM_HERE, WTF::Bind(&XRFrameProvider::ProcessScheduledFrame,
                                  WrapWeakPersistent(this), timestamp));
 }
 
-void VRFrameProvider::OnNonExclusiveVSync(double timestamp) {
+void XRFrameProvider::OnNonExclusiveVSync(double timestamp) {
   DVLOG(2) << __FUNCTION__;
 
   pending_non_exclusive_vsync_ = false;
@@ -226,18 +226,18 @@
     return;
 
   Platform::Current()->CurrentThread()->GetWebTaskRunner()->PostTask(
-      BLINK_FROM_HERE, WTF::Bind(&VRFrameProvider::ProcessScheduledFrame,
+      BLINK_FROM_HERE, WTF::Bind(&XRFrameProvider::ProcessScheduledFrame,
                                  WrapWeakPersistent(this), timestamp));
 }
 
-void VRFrameProvider::OnNonExclusivePose(device::mojom::blink::VRPosePtr pose) {
+void XRFrameProvider::OnNonExclusivePose(device::mojom::blink::VRPosePtr pose) {
   frame_pose_ = std::move(pose);
 }
 
-void VRFrameProvider::ProcessScheduledFrame(double timestamp) {
+void XRFrameProvider::ProcessScheduledFrame(double timestamp) {
   DVLOG(2) << __FUNCTION__;
 
-  TRACE_EVENT1("gpu", "VRFrameProvider::ProcessScheduledFrame", "frame",
+  TRACE_EVENT1("gpu", "XRFrameProvider::ProcessScheduledFrame", "frame",
                frame_id_);
 
   if (exclusive_session_) {
@@ -249,12 +249,12 @@
     // In the process of fulfilling the frame requests for each session they are
     // extremely likely to request another frame. Work off of a separate list
     // from the requests to prevent infinite loops.
-    HeapVector<Member<VRSession>> processing_sessions;
+    HeapVector<Member<XRSession>> processing_sessions;
     swap(requesting_sessions_, processing_sessions);
 
     // Inform sessions with a pending request of the new frame
     for (unsigned i = 0; i < processing_sessions.size(); ++i) {
-      VRSession* session = processing_sessions.at(i).Get();
+      XRSession* session = processing_sessions.at(i).Get();
       std::unique_ptr<TransformationMatrix> pose_matrix =
           getPoseMatrix(frame_pose_);
       session->OnFrame(std::move(pose_matrix));
@@ -262,7 +262,7 @@
   }
 }
 
-void VRFrameProvider::Trace(blink::Visitor* visitor) {
+void XRFrameProvider::Trace(blink::Visitor* visitor) {
   visitor->Trace(device_);
   visitor->Trace(pending_exclusive_session_resolver_);
   visitor->Trace(exclusive_session_);
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameProvider.h b/third_party/WebKit/Source/modules/xr/XRFrameProvider.h
similarity index 68%
rename from third_party/WebKit/Source/modules/vr/latest/VRFrameProvider.h
rename to third_party/WebKit/Source/modules/xr/XRFrameProvider.h
index a9aaef8..3f6b2fe2 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameProvider.h
+++ b/third_party/WebKit/Source/modules/xr/XRFrameProvider.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRFrameProvider_h
-#define VRFrameProvider_h
+#ifndef XRFrameProvider_h
+#define XRFrameProvider_h
 
 #include "device/vr/vr_service.mojom-blink.h"
 #include "mojo/public/cpp/bindings/binding.h"
@@ -14,22 +14,22 @@
 namespace blink {
 
 class ScriptPromiseResolver;
-class VRDevice;
-class VRSession;
+class XRDevice;
+class XRSession;
 
 // This class manages requesting and dispatching frame updates, which includes
-// pose information for a given VRDevice.
-class VRFrameProvider final
-    : public GarbageCollectedFinalized<VRFrameProvider> {
+// pose information for a given XRDevice.
+class XRFrameProvider final
+    : public GarbageCollectedFinalized<XRFrameProvider> {
  public:
-  explicit VRFrameProvider(VRDevice*);
+  explicit XRFrameProvider(XRDevice*);
 
-  VRSession* exclusive_session() const { return exclusive_session_; }
+  XRSession* exclusive_session() const { return exclusive_session_; }
 
-  void BeginExclusiveSession(VRSession*, ScriptPromiseResolver*);
+  void BeginExclusiveSession(XRSession*, ScriptPromiseResolver*);
   void OnExclusiveSessionEnded();
 
-  void RequestFrame(VRSession*);
+  void RequestFrame(XRSession*);
 
   void OnExclusiveVSync(double timestamp);
   void OnNonExclusiveVSync(double timestamp);
@@ -47,18 +47,18 @@
   void OnPresentComplete(bool success);
   void ProcessScheduledFrame(double timestamp);
 
-  const Member<VRDevice> device_;
-  Member<VRSession> exclusive_session_;
+  const Member<XRDevice> device_;
+  Member<XRSession> exclusive_session_;
   Member<ScriptPromiseResolver> pending_exclusive_session_resolver_;
 
   // Non-exclusive Sessions which have requested a frame update.
-  HeapVector<Member<VRSession>> requesting_sessions_;
+  HeapVector<Member<XRSession>> requesting_sessions_;
 
   device::mojom::blink::VRMagicWindowProviderPtr magic_window_provider_;
   device::mojom::blink::VRPosePtr frame_pose_;
 
-  // This frame ID is VR-specific and is used to track when frames arrive at the
-  // VR compositor so that it knows which poses to use, when to apply bounds
+  // This frame ID is XR-specific and is used to track when frames arrive at the
+  // XR compositor so that it knows which poses to use, when to apply bounds
   // updates, etc.
   int16_t frame_id_ = -1;
   bool pending_exclusive_vsync_ = false;
@@ -72,4 +72,4 @@
 
 }  // namespace blink
 
-#endif  // VRFrameProvider_h
+#endif  // XRFrameProvider_h
diff --git a/third_party/WebKit/Source/modules/xr/XRFrameRequestCallback.idl b/third_party/WebKit/Source/modules/xr/XRFrameRequestCallback.idl
new file mode 100644
index 0000000..66dc93f
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRFrameRequestCallback.idl
@@ -0,0 +1,6 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://immersive-web.github.io/webxr/spec/latest/#callbackdef-xrframerequestcallback
+callback XRFrameRequestCallback = void (XRPresentationFrame frame);
diff --git a/third_party/WebKit/Source/modules/xr/XRFrameRequestCallbackCollection.cpp b/third_party/WebKit/Source/modules/xr/XRFrameRequestCallbackCollection.cpp
new file mode 100644
index 0000000..63fe34a
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRFrameRequestCallbackCollection.cpp
@@ -0,0 +1,71 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/xr/XRFrameRequestCallbackCollection.h"
+
+#include "bindings/modules/v8/v8_xr_frame_request_callback.h"
+#include "core/inspector/InspectorTraceEvents.h"
+#include "core/probe/CoreProbes.h"
+#include "modules/xr/XRPresentationFrame.h"
+#include "modules/xr/XRSession.h"
+
+namespace blink {
+
+XRFrameRequestCallbackCollection::XRFrameRequestCallbackCollection(
+    ExecutionContext* context)
+    : context_(context) {}
+
+XRFrameRequestCallbackCollection::CallbackId
+XRFrameRequestCallbackCollection::RegisterCallback(
+    V8XRFrameRequestCallback* callback) {
+  CallbackId id = ++next_callback_id_;
+  callbacks_.Set(id, callback);
+  pending_callbacks_.push_back(id);
+
+  probe::AsyncTaskScheduledBreakable(context_, "XRRequestFrame", callback);
+  return id;
+}
+
+void XRFrameRequestCallbackCollection::CancelCallback(CallbackId id) {
+  if (IsValidCallbackId(id)) {
+    callbacks_.erase(id);
+  }
+}
+
+void XRFrameRequestCallbackCollection::ExecuteCallbacks(
+    XRSession* session,
+    XRPresentationFrame* frame) {
+  // First, generate a list of callbacks to consider.  Callbacks registered from
+  // this point on are considered only for the "next" frame, not this one.
+  DCHECK(callbacks_to_invoke_.IsEmpty());
+  callbacks_to_invoke_.swap(pending_callbacks_);
+
+  for (const auto& id : callbacks_to_invoke_) {
+    V8XRFrameRequestCallback* callback = callbacks_.Take(id);
+
+    // Callback won't be found if it was cancelled.
+    if (!callback)
+      continue;
+
+    probe::AsyncTask async_task(context_, callback);
+    probe::UserCallback probe(context_, "XRRequestFrame", AtomicString(), true);
+    callback->InvokeAndReportException(session, frame);
+  }
+
+  callbacks_to_invoke_.clear();
+}
+
+void XRFrameRequestCallbackCollection::Trace(blink::Visitor* visitor) {
+  visitor->Trace(callbacks_);
+  visitor->Trace(context_);
+}
+
+void XRFrameRequestCallbackCollection::TraceWrappers(
+    const blink::ScriptWrappableVisitor* visitor) const {
+  for (const auto& callback : callbacks_.Values()) {
+    visitor->TraceWrappers(callback);
+  }
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallbackCollection.h b/third_party/WebKit/Source/modules/xr/XRFrameRequestCallbackCollection.h
similarity index 69%
rename from third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallbackCollection.h
rename to third_party/WebKit/Source/modules/xr/XRFrameRequestCallbackCollection.h
index 0b6f5a6..94970aa9 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRFrameRequestCallbackCollection.h
+++ b/third_party/WebKit/Source/modules/xr/XRFrameRequestCallbackCollection.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRFrameRequestCallbackCollection_h
-#define VRFrameRequestCallbackCollection_h
+#ifndef XRFrameRequestCallbackCollection_h
+#define XRFrameRequestCallbackCollection_h
 
 #include "platform/bindings/TraceWrapperMember.h"
 #include "platform/heap/Handle.h"
@@ -11,20 +11,20 @@
 namespace blink {
 
 class ExecutionContext;
-class V8VRFrameRequestCallback;
-class VRPresentationFrame;
-class VRSession;
+class V8XRFrameRequestCallback;
+class XRPresentationFrame;
+class XRSession;
 
-class VRFrameRequestCallbackCollection final : public TraceWrapperBase {
+class XRFrameRequestCallbackCollection final : public TraceWrapperBase {
   DISALLOW_NEW();
 
  public:
-  explicit VRFrameRequestCallbackCollection(ExecutionContext*);
+  explicit XRFrameRequestCallbackCollection(ExecutionContext*);
 
   using CallbackId = int;
-  CallbackId RegisterCallback(V8VRFrameRequestCallback*);
+  CallbackId RegisterCallback(V8XRFrameRequestCallback*);
   void CancelCallback(CallbackId);
-  void ExecuteCallbacks(VRSession*, VRPresentationFrame*);
+  void ExecuteCallbacks(XRSession*, XRPresentationFrame*);
 
   bool IsEmpty() const { return !callbacks_.size(); }
 
@@ -39,7 +39,7 @@
   }
 
   using CallbackMap =
-      HeapHashMap<CallbackId, TraceWrapperMember<V8VRFrameRequestCallback>>;
+      HeapHashMap<CallbackId, TraceWrapperMember<V8XRFrameRequestCallback>>;
   CallbackMap callbacks_;
   Vector<CallbackId> pending_callbacks_;
   // Only non-empty while inside executeCallbacks.
diff --git a/third_party/WebKit/Source/modules/xr/XRLayer.cpp b/third_party/WebKit/Source/modules/xr/XRLayer.cpp
new file mode 100644
index 0000000..24b6050
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRLayer.cpp
@@ -0,0 +1,26 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/xr/XRLayer.h"
+#include "modules/xr/XRSession.h"
+
+namespace blink {
+
+XRLayer::XRLayer(XRSession* session, XRLayerType layer_type)
+    : session_(session), layer_type_(layer_type) {}
+
+XRViewport* XRLayer::GetViewport(XRView::Eye) {
+  return nullptr;
+}
+
+void XRLayer::OnFrameStart() {}
+void XRLayer::OnFrameEnd() {}
+void XRLayer::OnResize() {}
+
+void XRLayer::Trace(blink::Visitor* visitor) {
+  visitor->Trace(session_);
+  ScriptWrappable::Trace(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/xr/XRLayer.h b/third_party/WebKit/Source/modules/xr/XRLayer.h
new file mode 100644
index 0000000..29587a3
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRLayer.h
@@ -0,0 +1,43 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef XRLayer_h
+#define XRLayer_h
+
+#include "modules/xr/XRView.h"
+#include "platform/bindings/ScriptWrappable.h"
+#include "platform/heap/Handle.h"
+#include "platform/wtf/Forward.h"
+
+namespace blink {
+
+class XRSession;
+class XRViewport;
+
+enum XRLayerType { kXRWebGLLayerType };
+
+class XRLayer : public ScriptWrappable {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  XRLayer(XRSession*, XRLayerType);
+
+  XRSession* session() const { return session_; }
+  XRLayerType layerType() const { return layer_type_; }
+  virtual XRViewport* GetViewport(XRView::Eye);
+
+  virtual void OnFrameStart();
+  virtual void OnFrameEnd();
+  virtual void OnResize();
+
+  virtual void Trace(blink::Visitor*);
+
+ private:
+  const Member<XRSession> session_;
+  XRLayerType layer_type_;
+};
+
+}  // namespace blink
+
+#endif  // XRLayer_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRLayer.idl b/third_party/WebKit/Source/modules/xr/XRLayer.idl
similarity index 68%
rename from third_party/WebKit/Source/modules/vr/latest/VRLayer.idl
rename to third_party/WebKit/Source/modules/xr/XRLayer.idl
index 9119307e..76da959 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRLayer.idl
+++ b/third_party/WebKit/Source/modules/xr/XRLayer.idl
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrlayer-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrlayer-interface
 [
     SecureContext,
     RuntimeEnabled=WebXR
-] interface VRLayer {};
+] interface XRLayer {};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.cpp b/third_party/WebKit/Source/modules/xr/XRPresentationFrame.cpp
similarity index 60%
rename from third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.cpp
rename to third_party/WebKit/Source/modules/xr/XRPresentationFrame.cpp
index ad7b2ed..27fa3879c 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRPresentationFrame.cpp
@@ -2,24 +2,24 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRPresentationFrame.h"
+#include "modules/xr/XRPresentationFrame.h"
 
-#include "modules/vr/latest/VRCoordinateSystem.h"
-#include "modules/vr/latest/VRDevicePose.h"
-#include "modules/vr/latest/VRSession.h"
-#include "modules/vr/latest/VRView.h"
+#include "modules/xr/XRCoordinateSystem.h"
+#include "modules/xr/XRDevicePose.h"
+#include "modules/xr/XRSession.h"
+#include "modules/xr/XRView.h"
 
 namespace blink {
 
-VRPresentationFrame::VRPresentationFrame(VRSession* session)
+XRPresentationFrame::XRPresentationFrame(XRSession* session)
     : session_(session) {}
 
-const HeapVector<Member<VRView>>& VRPresentationFrame::views() const {
+const HeapVector<Member<XRView>>& XRPresentationFrame::views() const {
   return session_->views();
 }
 
-VRDevicePose* VRPresentationFrame::getDevicePose(
-    VRCoordinateSystem* coordinate_system) const {
+XRDevicePose* XRPresentationFrame::getDevicePose(
+    XRCoordinateSystem* coordinate_system) const {
   // If we don't have a valid base pose return null. Most common when tracking
   // is lost.
   if (!base_pose_matrix_ || !coordinate_system) {
@@ -38,15 +38,15 @@
     return nullptr;
   }
 
-  return new VRDevicePose(session(), std::move(pose));
+  return new XRDevicePose(session(), std::move(pose));
 }
 
-void VRPresentationFrame::UpdateBasePose(
+void XRPresentationFrame::UpdateBasePose(
     std::unique_ptr<TransformationMatrix> base_pose_matrix) {
   base_pose_matrix_ = std::move(base_pose_matrix);
 }
 
-void VRPresentationFrame::Trace(blink::Visitor* visitor) {
+void XRPresentationFrame::Trace(blink::Visitor* visitor) {
   visitor->Trace(session_);
   ScriptWrappable::Trace(visitor);
 }
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.h b/third_party/WebKit/Source/modules/xr/XRPresentationFrame.h
similarity index 60%
rename from third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.h
rename to third_party/WebKit/Source/modules/xr/XRPresentationFrame.h
index fff9501..99dc2e97 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRPresentationFrame.h
+++ b/third_party/WebKit/Source/modules/xr/XRPresentationFrame.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRPresentationFrame_h
-#define VRPresentationFrame_h
+#ifndef XRPresentationFrame_h
+#define XRPresentationFrame_h
 
 #include "device/vr/vr_service.mojom-blink.h"
 #include "platform/bindings/ScriptWrappable.h"
@@ -14,31 +14,31 @@
 
 namespace blink {
 
-class VRCoordinateSystem;
-class VRDevicePose;
-class VRSession;
-class VRView;
+class XRCoordinateSystem;
+class XRDevicePose;
+class XRSession;
+class XRView;
 
-class VRPresentationFrame final : public ScriptWrappable {
+class XRPresentationFrame final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  explicit VRPresentationFrame(VRSession*);
+  explicit XRPresentationFrame(XRSession*);
 
-  VRSession* session() const { return session_; }
+  XRSession* session() const { return session_; }
 
-  const HeapVector<Member<VRView>>& views() const;
-  VRDevicePose* getDevicePose(VRCoordinateSystem*) const;
+  const HeapVector<Member<XRView>>& views() const;
+  XRDevicePose* getDevicePose(XRCoordinateSystem*) const;
 
   void UpdateBasePose(std::unique_ptr<TransformationMatrix>);
 
   virtual void Trace(blink::Visitor*);
 
  private:
-  const Member<VRSession> session_;
+  const Member<XRSession> session_;
   std::unique_ptr<TransformationMatrix> base_pose_matrix_;
 };
 
 }  // namespace blink
 
-#endif  // VRWebGLLayer_h
+#endif  // XRWebGLLayer_h
diff --git a/third_party/WebKit/Source/modules/xr/XRPresentationFrame.idl b/third_party/WebKit/Source/modules/xr/XRPresentationFrame.idl
new file mode 100644
index 0000000..3a64182
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRPresentationFrame.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://immersive-web.github.io/webxr/spec/latest/#xrpresentationframe-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebXR
+] interface XRPresentationFrame {
+  readonly attribute XRSession session;
+  readonly attribute FrozenArray<XRView> views;
+
+  XRDevicePose? getDevicePose(XRCoordinateSystem coordinateSystem);
+};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRSession.cpp b/third_party/WebKit/Source/modules/xr/XRSession.cpp
similarity index 67%
rename from third_party/WebKit/Source/modules/vr/latest/VRSession.cpp
rename to third_party/WebKit/Source/modules/xr/XRSession.cpp
index 3d1ecb166..e4b3961 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRSession.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRSession.cpp
@@ -2,29 +2,29 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRSession.h"
+#include "modules/xr/XRSession.h"
 
 #include "bindings/core/v8/ScriptPromiseResolver.h"
-#include "bindings/modules/v8/v8_vr_frame_request_callback.h"
+#include "bindings/modules/v8/v8_xr_frame_request_callback.h"
 #include "core/dom/DOMException.h"
 #include "core/frame/LocalFrame.h"
 #include "modules/EventTargetModules.h"
-#include "modules/vr/latest/VR.h"
-#include "modules/vr/latest/VRDevice.h"
-#include "modules/vr/latest/VRFrameOfReference.h"
-#include "modules/vr/latest/VRFrameOfReferenceOptions.h"
-#include "modules/vr/latest/VRFrameProvider.h"
-#include "modules/vr/latest/VRLayer.h"
-#include "modules/vr/latest/VRPresentationFrame.h"
-#include "modules/vr/latest/VRSessionEvent.h"
-#include "modules/vr/latest/VRView.h"
+#include "modules/xr/XR.h"
+#include "modules/xr/XRDevice.h"
+#include "modules/xr/XRFrameOfReference.h"
+#include "modules/xr/XRFrameOfReferenceOptions.h"
+#include "modules/xr/XRFrameProvider.h"
+#include "modules/xr/XRLayer.h"
+#include "modules/xr/XRPresentationFrame.h"
+#include "modules/xr/XRSessionEvent.h"
+#include "modules/xr/XRView.h"
 #include "platform/wtf/AutoReset.h"
 
 namespace blink {
 
 namespace {
 
-const char kSessionEnded[] = "VRSession has already ended.";
+const char kSessionEnded[] = "XRSession has already ended.";
 
 const char kUnknownFrameOfReference[] = "Unknown frame of reference type";
 
@@ -34,7 +34,7 @@
 const double kDegToRad = M_PI / 180.0;
 
 void UpdateViewFromEyeParameters(
-    VRView* view,
+    XRView* view,
     const device::mojom::blink::VREyeParametersPtr& eye,
     double depth_near,
     double depth_far) {
@@ -50,56 +50,56 @@
 
 }  // namespace
 
-VRSession::VRSession(VRDevice* device, bool exclusive)
+XRSession::XRSession(XRDevice* device, bool exclusive)
     : device_(device),
       exclusive_(exclusive),
       callback_collection_(device->GetExecutionContext()) {}
 
-void VRSession::setDepthNear(double value) {
+void XRSession::setDepthNear(double value) {
   if (depth_near_ != value) {
     views_dirty_ = true;
     depth_near_ = value;
   }
 }
 
-void VRSession::setDepthFar(double value) {
+void XRSession::setDepthFar(double value) {
   if (depth_far_ != value) {
     views_dirty_ = true;
     depth_far_ = value;
   }
 }
 
-void VRSession::setBaseLayer(VRLayer* value) {
+void XRSession::setBaseLayer(XRLayer* value) {
   base_layer_ = value;
 }
 
-ExecutionContext* VRSession::GetExecutionContext() const {
+ExecutionContext* XRSession::GetExecutionContext() const {
   return device_->GetExecutionContext();
 }
 
-const AtomicString& VRSession::InterfaceName() const {
-  return EventTargetNames::VRSession;
+const AtomicString& XRSession::InterfaceName() const {
+  return EventTargetNames::XRSession;
 }
 
-ScriptPromise VRSession::requestFrameOfReference(
+ScriptPromise XRSession::requestFrameOfReference(
     ScriptState* script_state,
     const String& type,
-    const VRFrameOfReferenceOptions& options) {
+    const XRFrameOfReferenceOptions& options) {
   if (detached_) {
     return ScriptPromise::RejectWithDOMException(
         script_state, DOMException::Create(kInvalidStateError, kSessionEnded));
   }
 
-  VRFrameOfReference* frameOfRef = nullptr;
+  XRFrameOfReference* frameOfRef = nullptr;
   if (type == "headModel") {
     frameOfRef =
-        new VRFrameOfReference(this, VRFrameOfReference::kTypeHeadModel);
+        new XRFrameOfReference(this, XRFrameOfReference::kTypeHeadModel);
   } else if (type == "eyeLevel") {
     frameOfRef =
-        new VRFrameOfReference(this, VRFrameOfReference::kTypeEyeLevel);
+        new XRFrameOfReference(this, XRFrameOfReference::kTypeEyeLevel);
   } else if (type == "stage") {
     if (!options.disableStageEmulation()) {
-      frameOfRef = new VRFrameOfReference(this, VRFrameOfReference::kTypeStage);
+      frameOfRef = new XRFrameOfReference(this, XRFrameOfReference::kTypeStage);
       frameOfRef->UseEmulatedHeight(options.stageEmulationHeight());
     } else {
       // TODO(bajones): Support native stages using the standing transform.
@@ -122,7 +122,7 @@
   return promise;
 }
 
-int VRSession::requestFrame(V8VRFrameRequestCallback* callback) {
+int XRSession::requestFrame(V8XRFrameRequestCallback* callback) {
   // Don't allow any new frame requests once the session is ended.
   if (detached_)
     return 0;
@@ -134,18 +134,18 @@
 
   int id = callback_collection_.RegisterCallback(callback);
   if (!pending_frame_) {
-    // Kick off a request for a new VR frame.
+    // Kick off a request for a new XR frame.
     device_->frameProvider()->RequestFrame(this);
     pending_frame_ = true;
   }
   return id;
 }
 
-void VRSession::cancelFrame(int id) {
+void XRSession::cancelFrame(int id) {
   callback_collection_.CancelCallback(id);
 }
 
-ScriptPromise VRSession::end(ScriptState* script_state) {
+ScriptPromise XRSession::end(ScriptState* script_state) {
   // Don't allow a session to end twice.
   if (detached_) {
     return ScriptPromise::RejectWithDOMException(
@@ -164,7 +164,7 @@
   return promise;
 }
 
-void VRSession::ForceEnd() {
+void XRSession::ForceEnd() {
   // Detach this session from the device.
   detached_ = true;
 
@@ -174,34 +174,34 @@
     device_->frameProvider()->OnExclusiveSessionEnded();
   }
 
-  DispatchEvent(VRSessionEvent::Create(EventTypeNames::end, this));
+  DispatchEvent(XRSessionEvent::Create(EventTypeNames::end, this));
 }
 
-DoubleSize VRSession::IdealFramebufferSize() const {
-  double width = device_->vrDisplayInfoPtr()->leftEye->renderWidth +
-                 device_->vrDisplayInfoPtr()->rightEye->renderWidth;
-  double height = std::max(device_->vrDisplayInfoPtr()->leftEye->renderHeight,
-                           device_->vrDisplayInfoPtr()->rightEye->renderHeight);
+DoubleSize XRSession::IdealFramebufferSize() const {
+  double width = device_->xrDisplayInfoPtr()->leftEye->renderWidth +
+                 device_->xrDisplayInfoPtr()->rightEye->renderWidth;
+  double height = std::max(device_->xrDisplayInfoPtr()->leftEye->renderHeight,
+                           device_->xrDisplayInfoPtr()->rightEye->renderHeight);
   return DoubleSize(width, height);
 }
 
-void VRSession::OnFocus() {
+void XRSession::OnFocus() {
   if (!blurred_)
     return;
 
   blurred_ = false;
-  DispatchEvent(VRSessionEvent::Create(EventTypeNames::focus, this));
+  DispatchEvent(XRSessionEvent::Create(EventTypeNames::focus, this));
 }
 
-void VRSession::OnBlur() {
+void XRSession::OnBlur() {
   if (blurred_)
     return;
 
   blurred_ = true;
-  DispatchEvent(VRSessionEvent::Create(EventTypeNames::blur, this));
+  DispatchEvent(XRSessionEvent::Create(EventTypeNames::blur, this));
 }
 
-void VRSession::OnFrame(
+void XRSession::OnFrame(
     std::unique_ptr<TransformationMatrix> base_pose_matrix) {
   DVLOG(2) << __FUNCTION__;
   // Don't process any outstanding frames once the session is ended.
@@ -213,17 +213,17 @@
   if (!base_layer_)
     return;
 
-  VRPresentationFrame* presentation_frame = new VRPresentationFrame(this);
+  XRPresentationFrame* presentation_frame = new XRPresentationFrame(this);
   presentation_frame->UpdateBasePose(std::move(base_pose_matrix));
 
   if (pending_frame_) {
     pending_frame_ = false;
 
     // Cache the base layer, since it could change during the frame callback.
-    VRLayer* frame_base_layer = base_layer_;
+    XRLayer* frame_base_layer = base_layer_;
     frame_base_layer->OnFrameStart();
 
-    // Resolve the queued requestFrame callbacks. All VR rendering will happen
+    // Resolve the queued requestFrame callbacks. All XR rendering will happen
     // within these calls. resolving_frame_ will be true for the duration of the
     // callbacks.
     AutoReset<bool> resolving(&resolving_frame_, true);
@@ -233,22 +233,22 @@
   }
 }
 
-const HeapVector<Member<VRView>>& VRSession::views() {
+const HeapVector<Member<XRView>>& XRSession::views() {
   if (views_dirty_) {
     if (exclusive_) {
       // If we don't already have the views allocated, do so now.
       if (views_.IsEmpty()) {
-        views_.push_back(new VRView(this, VRView::kEyeLeft));
-        views_.push_back(new VRView(this, VRView::kEyeRight));
+        views_.push_back(new XRView(this, XRView::kEyeLeft));
+        views_.push_back(new XRView(this, XRView::kEyeRight));
       }
 
       // In exclusive mode the projection and view matrices must be aligned with
       // the device's physical optics.
-      UpdateViewFromEyeParameters(views_[VRView::kEyeLeft],
-                                  device_->vrDisplayInfoPtr()->leftEye,
+      UpdateViewFromEyeParameters(views_[XRView::kEyeLeft],
+                                  device_->xrDisplayInfoPtr()->leftEye,
                                   depth_near_, depth_far_);
-      UpdateViewFromEyeParameters(views_[VRView::kEyeRight],
-                                  device_->vrDisplayInfoPtr()->rightEye,
+      UpdateViewFromEyeParameters(views_[XRView::kEyeRight],
+                                  device_->xrDisplayInfoPtr()->rightEye,
                                   depth_near_, depth_far_);
     }
 
@@ -258,7 +258,7 @@
   return views_;
 }
 
-void VRSession::Trace(blink::Visitor* visitor) {
+void XRSession::Trace(blink::Visitor* visitor) {
   visitor->Trace(device_);
   visitor->Trace(base_layer_);
   visitor->Trace(views_);
@@ -266,7 +266,7 @@
   EventTargetWithInlineData::Trace(visitor);
 }
 
-void VRSession::TraceWrappers(
+void XRSession::TraceWrappers(
     const blink::ScriptWrappableVisitor* visitor) const {
   visitor->TraceWrappers(callback_collection_);
 }
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRSession.h b/third_party/WebKit/Source/modules/xr/XRSession.h
similarity index 76%
rename from third_party/WebKit/Source/modules/vr/latest/VRSession.h
rename to third_party/WebKit/Source/modules/xr/XRSession.h
index 7dfafb1..ad61822 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRSession.h
+++ b/third_party/WebKit/Source/modules/xr/XRSession.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRSession_h
-#define VRSession_h
+#ifndef XRSession_h
+#define XRSession_h
 
 #include "bindings/core/v8/ScriptPromise.h"
 #include "core/dom/events/EventTarget.h"
-#include "modules/vr/latest/VRFrameRequestCallbackCollection.h"
+#include "modules/xr/XRFrameRequestCallbackCollection.h"
 #include "platform/bindings/TraceWrapperMember.h"
 #include "platform/geometry/DoubleSize.h"
 #include "platform/heap/Handle.h"
@@ -16,19 +16,19 @@
 
 namespace blink {
 
-class V8VRFrameRequestCallback;
-class VRDevice;
-class VRFrameOfReferenceOptions;
-class VRLayer;
-class VRView;
+class V8XRFrameRequestCallback;
+class XRDevice;
+class XRFrameOfReferenceOptions;
+class XRLayer;
+class XRView;
 
-class VRSession final : public EventTargetWithInlineData {
+class XRSession final : public EventTargetWithInlineData {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  VRSession(VRDevice*, bool exclusive);
+  XRSession(XRDevice*, bool exclusive);
 
-  VRDevice* device() const { return device_; }
+  XRDevice* device() const { return device_; }
   bool exclusive() const { return exclusive_; }
 
   // Near and far depths are used when computing projection matrices for this
@@ -39,8 +39,8 @@
   double depthFar() const { return depth_far_; }
   void setDepthFar(double value);
 
-  VRLayer* baseLayer() const { return base_layer_; }
-  void setBaseLayer(VRLayer* value);
+  XRLayer* baseLayer() const { return base_layer_; }
+  void setBaseLayer(XRLayer* value);
 
   DEFINE_ATTRIBUTE_EVENT_LISTENER(blur);
   DEFINE_ATTRIBUTE_EVENT_LISTENER(focus);
@@ -49,9 +49,9 @@
 
   ScriptPromise requestFrameOfReference(ScriptState*,
                                         const String& type,
-                                        const VRFrameOfReferenceOptions&);
+                                        const XRFrameOfReferenceOptions&);
 
-  int requestFrame(V8VRFrameRequestCallback*);
+  int requestFrame(V8XRFrameRequestCallback*);
   void cancelFrame(int id);
 
   // Called by JavaScript to manually end the session.
@@ -78,18 +78,18 @@
   void OnBlur();
   void OnFrame(std::unique_ptr<TransformationMatrix>);
 
-  const HeapVector<Member<VRView>>& views();
+  const HeapVector<Member<XRView>>& views();
 
   void Trace(blink::Visitor*) override;
   virtual void TraceWrappers(const blink::ScriptWrappableVisitor*) const;
 
  private:
-  const Member<VRDevice> device_;
+  const Member<XRDevice> device_;
   const bool exclusive_;
-  Member<VRLayer> base_layer_;
-  HeapVector<Member<VRView>> views_;
+  Member<XRLayer> base_layer_;
+  HeapVector<Member<XRView>> views_;
 
-  VRFrameRequestCallbackCollection callback_collection_;
+  XRFrameRequestCallbackCollection callback_collection_;
 
   double depth_near_ = 0.1;
   double depth_far_ = 1000.0;
@@ -102,4 +102,4 @@
 
 }  // namespace blink
 
-#endif  // VRWebGLLayer_h
+#endif  // XRWebGLLayer_h
diff --git a/third_party/WebKit/Source/modules/xr/XRSession.idl b/third_party/WebKit/Source/modules/xr/XRSession.idl
new file mode 100644
index 0000000..5918c8f29
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRSession.idl
@@ -0,0 +1,29 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://immersive-web.github.io/webxr/spec/latest/#xrsession-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebXR
+] interface XRSession : EventTarget {
+  readonly attribute XRDevice device;
+  readonly attribute boolean exclusive;
+
+  attribute double depthNear;
+  attribute double depthFar;
+
+  attribute XRLayer baseLayer;
+
+  attribute EventHandler onblur;
+  attribute EventHandler onfocus;
+  attribute EventHandler onresetpose;
+  attribute EventHandler onend;
+
+  [CallWith=ScriptState] Promise<XRFrameOfReference> requestFrameOfReference(XRFrameOfReferenceType type, [PermissiveDictionaryConversion] optional XRFrameOfReferenceOptions options);
+
+  long requestFrame(XRFrameRequestCallback callback);
+  void cancelFrame(long handle);
+
+  [CallWith=ScriptState] Promise<void> end();
+};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRSessionCreationOptions.idl b/third_party/WebKit/Source/modules/xr/XRSessionCreationOptions.idl
similarity index 62%
rename from third_party/WebKit/Source/modules/vr/latest/VRSessionCreationOptions.idl
rename to third_party/WebKit/Source/modules/xr/XRSessionCreationOptions.idl
index 786d630b..382052f 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRSessionCreationOptions.idl
+++ b/third_party/WebKit/Source/modules/xr/XRSessionCreationOptions.idl
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrsessioncreationoptions-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrsessioncreationoptions-interface
 [
     SecureContext
-] dictionary VRSessionCreationOptions {
+] dictionary XRSessionCreationOptions {
   boolean exclusive = false;
 };
diff --git a/third_party/WebKit/Source/modules/xr/XRSessionEvent.cpp b/third_party/WebKit/Source/modules/xr/XRSessionEvent.cpp
new file mode 100644
index 0000000..f1ca59c4
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRSessionEvent.cpp
@@ -0,0 +1,32 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/xr/XRSessionEvent.h"
+
+namespace blink {
+
+XRSessionEvent::XRSessionEvent() {}
+
+XRSessionEvent::XRSessionEvent(const AtomicString& type, XRSession* session)
+    : Event(type, true, false), session_(session) {}
+
+XRSessionEvent::XRSessionEvent(const AtomicString& type,
+                               const XRSessionEventInit& initializer)
+    : Event(type, initializer) {
+  if (initializer.hasSession())
+    session_ = initializer.session();
+}
+
+XRSessionEvent::~XRSessionEvent() {}
+
+const AtomicString& XRSessionEvent::InterfaceName() const {
+  return EventNames::XRSessionEvent;
+}
+
+void XRSessionEvent::Trace(blink::Visitor* visitor) {
+  visitor->Trace(session_);
+  Event::Trace(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/xr/XRSessionEvent.h b/third_party/WebKit/Source/modules/xr/XRSessionEvent.h
new file mode 100644
index 0000000..5885ca0
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRSessionEvent.h
@@ -0,0 +1,46 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef XRSessionEvent_h
+#define XRSessionEvent_h
+
+#include "modules/EventModules.h"
+#include "modules/xr/XRSession.h"
+#include "modules/xr/XRSessionEventInit.h"
+
+namespace blink {
+
+class XRSessionEvent final : public Event {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  static XRSessionEvent* Create() { return new XRSessionEvent; }
+  static XRSessionEvent* Create(const AtomicString& type, XRSession* session) {
+    return new XRSessionEvent(type, session);
+  }
+
+  static XRSessionEvent* Create(const AtomicString& type,
+                                const XRSessionEventInit& initializer) {
+    return new XRSessionEvent(type, initializer);
+  }
+
+  ~XRSessionEvent() override;
+
+  XRSession* session() const { return session_.Get(); }
+
+  const AtomicString& InterfaceName() const override;
+
+  void Trace(blink::Visitor*) override;
+
+ private:
+  XRSessionEvent();
+  XRSessionEvent(const AtomicString& type, XRSession*);
+  XRSessionEvent(const AtomicString& type, const XRSessionEventInit&);
+
+  Member<XRSession> session_;
+};
+
+}  // namespace blink
+
+#endif  // XRDisplayEvent_h
diff --git a/third_party/WebKit/Source/modules/xr/XRSessionEvent.idl b/third_party/WebKit/Source/modules/xr/XRSessionEvent.idl
new file mode 100644
index 0000000..8c2570b
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRSessionEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://immersive-web.github.io/webxr/spec/latest/#xrsessionevent-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebXR,
+    Constructor(DOMString type, XRSessionEventInit eventInitDict)
+] interface XRSessionEvent : Event {
+  readonly attribute XRSession session;
+};
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/xr/XRSessionEventInit.idl b/third_party/WebKit/Source/modules/xr/XRSessionEventInit.idl
new file mode 100644
index 0000000..cb2d268
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRSessionEventInit.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://immersive-web.github.io/webxr/spec/latest/#xrsessionevent-interface
+[
+    SecureContext
+] dictionary XRSessionEventInit : EventInit {
+  required XRSession session;
+};
\ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRStageBounds.cpp b/third_party/WebKit/Source/modules/xr/XRStageBounds.cpp
similarity index 73%
rename from third_party/WebKit/Source/modules/vr/latest/VRStageBounds.cpp
rename to third_party/WebKit/Source/modules/xr/XRStageBounds.cpp
index 108d1656..00d8342 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRStageBounds.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRStageBounds.cpp
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRStageBounds.h"
+#include "modules/xr/XRStageBounds.h"
 
 namespace blink {
 
-void VRStageBounds::Trace(blink::Visitor* visitor) {
+void XRStageBounds::Trace(blink::Visitor* visitor) {
   visitor->Trace(geometry_);
   ScriptWrappable::Trace(visitor);
 }
diff --git a/third_party/WebKit/Source/modules/xr/XRStageBounds.h b/third_party/WebKit/Source/modules/xr/XRStageBounds.h
new file mode 100644
index 0000000..97750cb1
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRStageBounds.h
@@ -0,0 +1,31 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef XRStageBounds_h
+#define XRStageBounds_h
+
+#include "modules/xr/XRStageBoundsPoint.h"
+#include "platform/bindings/ScriptWrappable.h"
+#include "platform/heap/Handle.h"
+#include "platform/wtf/Forward.h"
+
+namespace blink {
+
+class XRStageBounds final : public ScriptWrappable {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  XRStageBounds() = default;
+
+  HeapVector<Member<XRStageBoundsPoint>> geometry() const { return geometry_; }
+
+  virtual void Trace(blink::Visitor*);
+
+ private:
+  HeapVector<Member<XRStageBoundsPoint>> geometry_;
+};
+
+}  // namespace blink
+
+#endif  // XRStageBounds_h
diff --git a/third_party/WebKit/Source/modules/xr/XRStageBounds.idl b/third_party/WebKit/Source/modules/xr/XRStageBounds.idl
new file mode 100644
index 0000000..049e95b
--- /dev/null
+++ b/third_party/WebKit/Source/modules/xr/XRStageBounds.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://immersive-web.github.io/webxr/spec/latest/#xrstagebounds-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebXR
+] interface XRStageBounds {
+  readonly attribute FrozenArray<XRStageBoundsPoint> geometry;
+};
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRStageBoundsPoint.h b/third_party/WebKit/Source/modules/xr/XRStageBoundsPoint.h
similarity index 69%
rename from third_party/WebKit/Source/modules/vr/latest/VRStageBoundsPoint.h
rename to third_party/WebKit/Source/modules/xr/XRStageBoundsPoint.h
index 003aa92f..7291fa8 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRStageBoundsPoint.h
+++ b/third_party/WebKit/Source/modules/xr/XRStageBoundsPoint.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRStageBoundsPoint_h
-#define VRStageBoundsPoint_h
+#ifndef XRStageBoundsPoint_h
+#define XRStageBoundsPoint_h
 
 #include "platform/bindings/ScriptWrappable.h"
 #include "platform/heap/Handle.h"
@@ -11,11 +11,11 @@
 
 namespace blink {
 
-class VRStageBoundsPoint final : public ScriptWrappable {
+class XRStageBoundsPoint final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  VRStageBoundsPoint(double x, double z) : x_(x), z_(z) {}
+  XRStageBoundsPoint(double x, double z) : x_(x), z_(z) {}
 
   double x() const { return x_; }
   double z() const { return z_; }
@@ -27,4 +27,4 @@
 
 }  // namespace blink
 
-#endif  // VRStageBoundsPoint_h
+#endif  // XRStageBoundsPoint_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRStageBoundsPoint.idl b/third_party/WebKit/Source/modules/xr/XRStageBoundsPoint.idl
similarity index 70%
rename from third_party/WebKit/Source/modules/vr/latest/VRStageBoundsPoint.idl
rename to third_party/WebKit/Source/modules/xr/XRStageBoundsPoint.idl
index b6a2f89..99a4acd 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRStageBoundsPoint.idl
+++ b/third_party/WebKit/Source/modules/xr/XRStageBoundsPoint.idl
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrstageboundspoint-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrstageboundspoint-interface
 [
     SecureContext,
     RuntimeEnabled=WebXR
-] interface VRStageBoundsPoint {
+] interface XRStageBoundsPoint {
   readonly attribute double x;
   readonly attribute double z;
 };
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRView.cpp b/third_party/WebKit/Source/modules/xr/XRView.cpp
similarity index 77%
rename from third_party/WebKit/Source/modules/vr/latest/VRView.cpp
rename to third_party/WebKit/Source/modules/xr/XRView.cpp
index 3b8c6d0..208b9a9 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRView.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRView.cpp
@@ -2,35 +2,35 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRView.h"
+#include "modules/xr/XRView.h"
 
-#include "modules/vr/latest/VRLayer.h"
-#include "modules/vr/latest/VRPresentationFrame.h"
-#include "modules/vr/latest/VRSession.h"
-#include "modules/vr/latest/VRViewport.h"
+#include "modules/xr/XRLayer.h"
+#include "modules/xr/XRPresentationFrame.h"
+#include "modules/xr/XRSession.h"
+#include "modules/xr/XRViewport.h"
 #include "platform/geometry/FloatPoint3D.h"
 
 namespace blink {
 
-VRView::VRView(VRSession* session, Eye eye)
+XRView::XRView(XRSession* session, Eye eye)
     : eye_(eye),
       session_(session),
       projection_matrix_(DOMFloat32Array::Create(16)) {
   eye_string_ = (eye_ == kEyeLeft ? "left" : "right");
 }
 
-VRSession* VRView::session() const {
+XRSession* XRView::session() const {
   return session_;
 }
 
-VRViewport* VRView::getViewport(VRLayer* layer) const {
+XRViewport* XRView::getViewport(XRLayer* layer) const {
   if (!layer || layer->session() != session_)
     return nullptr;
 
   return layer->GetViewport(eye_);
 }
 
-void VRView::UpdateProjectionMatrixFromFoV(float up_rad,
+void XRView::UpdateProjectionMatrixFromFoV(float up_rad,
                                            float down_rad,
                                            float left_rad,
                                            float right_rad,
@@ -63,11 +63,11 @@
   out[15] = 0.0f;
 }
 
-void VRView::UpdateOffset(float x, float y, float z) {
+void XRView::UpdateOffset(float x, float y, float z) {
   offset_.Set(x, y, z);
 }
 
-void VRView::Trace(blink::Visitor* visitor) {
+void XRView::Trace(blink::Visitor* visitor) {
   visitor->Trace(session_);
   visitor->Trace(projection_matrix_);
   ScriptWrappable::Trace(visitor);
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRView.h b/third_party/WebKit/Source/modules/xr/XRView.h
similarity index 83%
rename from third_party/WebKit/Source/modules/vr/latest/VRView.h
rename to third_party/WebKit/Source/modules/xr/XRView.h
index acc5b9b..84e4fa4 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRView.h
+++ b/third_party/WebKit/Source/modules/xr/XRView.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRView_h
-#define VRView_h
+#ifndef XRView_h
+#define XRView_h
 
 #include "core/typed_arrays/DOMTypedArray.h"
 #include "platform/bindings/ScriptWrappable.h"
@@ -15,22 +15,22 @@
 
 namespace blink {
 
-class VRLayer;
-class VRSession;
-class VRViewport;
+class XRLayer;
+class XRSession;
+class XRViewport;
 
-class VRView final : public ScriptWrappable {
+class XRView final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
   enum Eye { kEyeLeft = 0, kEyeRight = 1 };
 
-  VRView(VRSession*, Eye);
+  XRView(XRSession*, Eye);
 
   const String& eye() const { return eye_string_; }
-  VRSession* session() const;
+  XRSession* session() const;
   DOMFloat32Array* projectionMatrix() const { return projection_matrix_; }
-  VRViewport* getViewport(VRLayer*) const;
+  XRViewport* getViewport(XRLayer*) const;
 
   void UpdateProjectionMatrixFromFoV(float up_rad,
                                      float down_rad,
@@ -48,11 +48,11 @@
  private:
   const Eye eye_;
   String eye_string_;
-  Member<VRSession> session_;
+  Member<XRSession> session_;
   Member<DOMFloat32Array> projection_matrix_;
   FloatPoint3D offset_;
 };
 
 }  // namespace blink
 
-#endif  // VRView_h
+#endif  // XRView_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRView.idl b/third_party/WebKit/Source/modules/xr/XRView.idl
similarity index 69%
rename from third_party/WebKit/Source/modules/vr/latest/VRView.idl
rename to third_party/WebKit/Source/modules/xr/XRView.idl
index 61b26aa3..3b0d5e2 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRView.idl
+++ b/third_party/WebKit/Source/modules/xr/XRView.idl
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrview-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrview-interface
 [
     SecureContext,
     RuntimeEnabled=WebXR
-] interface VRView {
+] interface XRView {
   readonly attribute VREye? eye;
   readonly attribute Float32Array projectionMatrix;
-  VRViewport? getViewport(VRLayer layer);
+  XRViewport? getViewport(XRLayer layer);
 };
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRViewport.h b/third_party/WebKit/Source/modules/xr/XRViewport.h
similarity index 78%
rename from third_party/WebKit/Source/modules/vr/latest/VRViewport.h
rename to third_party/WebKit/Source/modules/xr/XRViewport.h
index 80829b5..1a60b2ad 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRViewport.h
+++ b/third_party/WebKit/Source/modules/xr/XRViewport.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRViewport_h
-#define VRViewport_h
+#ifndef XRViewport_h
+#define XRViewport_h
 
 #include "platform/bindings/ScriptWrappable.h"
 #include "platform/heap/Handle.h"
@@ -11,11 +11,11 @@
 
 namespace blink {
 
-class VRViewport final : public ScriptWrappable {
+class XRViewport final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  VRViewport(int x, int y, int width, int height)
+  XRViewport(int x, int y, int width, int height)
       : x_(x), y_(y), width_(width), height_(height) {}
 
   int x() const { return x_; }
@@ -32,4 +32,4 @@
 
 }  // namespace blink
 
-#endif  // VRViewport_h
+#endif  // XRViewport_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRViewport.idl b/third_party/WebKit/Source/modules/xr/XRViewport.idl
similarity index 77%
rename from third_party/WebKit/Source/modules/vr/latest/VRViewport.idl
rename to third_party/WebKit/Source/modules/xr/XRViewport.idl
index c259573..17a8b74 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRViewport.idl
+++ b/third_party/WebKit/Source/modules/xr/XRViewport.idl
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrviewport-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrviewport-interface
 [
     SecureContext,
     RuntimeEnabled=WebXR
-] interface VRViewport {
+] interface XRViewport {
   readonly attribute long x;
   readonly attribute long y;
   readonly attribute long width;
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRWebGLDrawingBuffer.cpp b/third_party/WebKit/Source/modules/xr/XRWebGLDrawingBuffer.cpp
similarity index 93%
rename from third_party/WebKit/Source/modules/vr/latest/VRWebGLDrawingBuffer.cpp
rename to third_party/WebKit/Source/modules/xr/XRWebGLDrawingBuffer.cpp
index 2b0e00b..62b6caf 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRWebGLDrawingBuffer.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRWebGLDrawingBuffer.cpp
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRWebGLDrawingBuffer.h"
+#include "modules/xr/XRWebGLDrawingBuffer.h"
 
 #include "gpu/command_buffer/client/gles2_interface.h"
-#include "modules/vr/latest/VRSession.h"
-#include "modules/vr/latest/VRView.h"
-#include "modules/vr/latest/VRViewport.h"
 #include "modules/webgl/WebGLFramebuffer.h"
+#include "modules/xr/XRSession.h"
+#include "modules/xr/XRView.h"
+#include "modules/xr/XRViewport.h"
 #include "platform/graphics/AcceleratedStaticBitmapImage.h"
 #include "platform/graphics/gpu/DrawingBuffer.h"
 #include "platform/graphics/gpu/Extensions3DUtil.h"
@@ -21,7 +21,7 @@
 // to the more narrow use case. It may make sense in the future to abstract out
 // some of the common bits into a base class?
 
-VRWebGLDrawingBuffer* VRWebGLDrawingBuffer::Create(
+XRWebGLDrawingBuffer* XRWebGLDrawingBuffer::Create(
     WebGLRenderingContextBase* webgl_context,
     const IntSize& size,
     bool want_alpha_channel,
@@ -66,19 +66,19 @@
   // TODO(bajones): Support multiview.
   bool multiview_supported = false;
 
-  VRWebGLDrawingBuffer* drawing_buffer = new VRWebGLDrawingBuffer(
+  XRWebGLDrawingBuffer* drawing_buffer = new XRWebGLDrawingBuffer(
       webgl_context, discard_framebuffer_supported, want_alpha_channel,
       want_depth_buffer, want_stencil_buffer, multiview_supported);
   if (!drawing_buffer->Initialize(size, multisample_supported,
                                   multiview_supported)) {
-    DLOG(ERROR) << "VRWebGLDrawingBuffer Initialization Failed";
+    DLOG(ERROR) << "XRWebGLDrawingBuffer Initialization Failed";
     return nullptr;
   }
 
   return drawing_buffer;
 }
 
-VRWebGLDrawingBuffer::VRWebGLDrawingBuffer(
+XRWebGLDrawingBuffer::XRWebGLDrawingBuffer(
     WebGLRenderingContextBase* webgl_context,
     bool discard_framebuffer_supported,
     bool want_alpha_channel,
@@ -96,7 +96,7 @@
 
 // TODO(bajones): The GL resources allocated in this function are leaking. Add
 // a way to clean up the buffers when the layer is GCed or the session ends.
-bool VRWebGLDrawingBuffer::Initialize(const IntSize& size,
+bool XRWebGLDrawingBuffer::Initialize(const IntSize& size,
                                       bool use_multisampling,
                                       bool use_multiview) {
   gpu::gles2::GLES2Interface* gl = gl_context();
@@ -152,7 +152,7 @@
   return true;
 }
 
-void VRWebGLDrawingBuffer::Resize(const IntSize& new_size) {
+void XRWebGLDrawingBuffer::Resize(const IntSize& new_size) {
   if (webgl_context_->isContextLost())
     return;
 
@@ -252,11 +252,11 @@
   client->DrawingBufferClientRestoreFramebufferBinding();
 }
 
-void VRWebGLDrawingBuffer::MarkFramebufferComplete(bool complete) {
+void XRWebGLDrawingBuffer::MarkFramebufferComplete(bool complete) {
   framebuffer_->MarkOpaqueBufferComplete(complete);
 }
 
-GLuint VRWebGLDrawingBuffer::CreateColorBuffer() {
+GLuint XRWebGLDrawingBuffer::CreateColorBuffer() {
   gpu::gles2::GLES2Interface* gl = gl_context();
 
   GLuint texture_id = 0;
@@ -284,14 +284,14 @@
   return texture_id;
 }
 
-bool VRWebGLDrawingBuffer::WantExplicitResolve() const {
+bool XRWebGLDrawingBuffer::WantExplicitResolve() const {
   return anti_aliasing_mode_ == kMSAAExplicitResolve;
 }
 
 // Swap the front and back buffers. After this call the front buffer should
 // contain the previously rendered content, resolved from the multisample
 // renderbuffer if needed.
-void VRWebGLDrawingBuffer::SwapColorBuffers() {
+void XRWebGLDrawingBuffer::SwapColorBuffers() {
   if (webgl_context_->isContextLost())
     return;
 
@@ -338,12 +338,12 @@
   client->DrawingBufferClientRestoreFramebufferBinding();
 }
 
-void VRWebGLDrawingBuffer::Trace(blink::Visitor* visitor) {
+void XRWebGLDrawingBuffer::Trace(blink::Visitor* visitor) {
   visitor->Trace(webgl_context_);
   visitor->Trace(framebuffer_);
 }
 
-void VRWebGLDrawingBuffer::TraceWrappers(
+void XRWebGLDrawingBuffer::TraceWrappers(
     const ScriptWrappableVisitor* visitor) const {
   visitor->TraceWrappers(webgl_context_);
 }
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRWebGLDrawingBuffer.h b/third_party/WebKit/Source/modules/xr/XRWebGLDrawingBuffer.h
similarity index 87%
rename from third_party/WebKit/Source/modules/vr/latest/VRWebGLDrawingBuffer.h
rename to third_party/WebKit/Source/modules/xr/XRWebGLDrawingBuffer.h
index 4f6cc93..df2e6ac 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRWebGLDrawingBuffer.h
+++ b/third_party/WebKit/Source/modules/xr/XRWebGLDrawingBuffer.h
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRWebGLDrawingBuffer_h
-#define VRWebGLDrawingBuffer_h
+#ifndef XRWebGLDrawingBuffer_h
+#define XRWebGLDrawingBuffer_h
 
 #include "gpu/command_buffer/common/mailbox_holder.h"
-#include "modules/vr/latest/VRLayer.h"
-#include "modules/vr/latest/VRWebGLLayerInit.h"
 #include "modules/webgl/WebGL2RenderingContext.h"
 #include "modules/webgl/WebGLRenderingContext.h"
+#include "modules/xr/XRLayer.h"
+#include "modules/xr/XRWebGLLayerInit.h"
 #include "platform/geometry/IntSize.h"
 #include "platform/heap/Handle.h"
 
@@ -17,11 +17,11 @@
 
 class WebGLFramebuffer;
 
-class VRWebGLDrawingBuffer final
-    : public GarbageCollected<VRWebGLDrawingBuffer>,
+class XRWebGLDrawingBuffer final
+    : public GarbageCollected<XRWebGLDrawingBuffer>,
       public TraceWrapperBase {
  public:
-  static VRWebGLDrawingBuffer* Create(WebGLRenderingContextBase*,
+  static XRWebGLDrawingBuffer* Create(WebGLRenderingContextBase*,
                                       const IntSize&,
                                       bool want_alpha_channel,
                                       bool want_depth_buffer,
@@ -48,7 +48,7 @@
   virtual void TraceWrappers(const ScriptWrappableVisitor*) const;
 
  private:
-  VRWebGLDrawingBuffer(WebGLRenderingContextBase*,
+  XRWebGLDrawingBuffer(WebGLRenderingContextBase*,
                        bool discard_framebuffer_supported,
                        bool want_alpha_channel,
                        bool want_depth_buffer,
@@ -106,4 +106,4 @@
 
 }  // namespace blink
 
-#endif  // VRWebGLDrawingBuffer_h
+#endif  // XRWebGLDrawingBuffer_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.cpp b/third_party/WebKit/Source/modules/xr/XRWebGLLayer.cpp
similarity index 75%
rename from third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.cpp
rename to third_party/WebKit/Source/modules/xr/XRWebGLLayer.cpp
index 97455169..2bb1f058 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.cpp
+++ b/third_party/WebKit/Source/modules/xr/XRWebGLLayer.cpp
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/vr/latest/VRWebGLLayer.h"
+#include "modules/xr/XRWebGLLayer.h"
 
-#include "modules/vr/latest/VRDevice.h"
-#include "modules/vr/latest/VRFrameProvider.h"
-#include "modules/vr/latest/VRSession.h"
-#include "modules/vr/latest/VRView.h"
-#include "modules/vr/latest/VRViewport.h"
 #include "modules/webgl/WebGL2RenderingContext.h"
 #include "modules/webgl/WebGLFramebuffer.h"
 #include "modules/webgl/WebGLRenderingContext.h"
+#include "modules/xr/XRDevice.h"
+#include "modules/xr/XRFrameProvider.h"
+#include "modules/xr/XRSession.h"
+#include "modules/xr/XRView.h"
+#include "modules/xr/XRViewport.h"
 #include "platform/geometry/DoubleSize.h"
 #include "platform/geometry/IntSize.h"
 
@@ -32,10 +32,10 @@
 
 }  // namespace
 
-VRWebGLLayer* VRWebGLLayer::Create(
-    VRSession* session,
+XRWebGLLayer* XRWebGLLayer::Create(
+    XRSession* session,
     const WebGLRenderingContextOrWebGL2RenderingContext& context,
-    const VRWebGLLayerInit& initializer) {
+    const XRWebGLLayerInit& initializer) {
   WebGLRenderingContextBase* webgl_context;
   if (context.IsWebGL2RenderingContext()) {
     webgl_context = context.GetAsWebGL2RenderingContext();
@@ -65,7 +65,7 @@
   IntSize desired_size(framebuffers_size.Width() * framebuffer_scale,
                        framebuffers_size.Height() * framebuffer_scale);
 
-  VRWebGLDrawingBuffer* drawing_buffer = VRWebGLDrawingBuffer::Create(
+  XRWebGLDrawingBuffer* drawing_buffer = XRWebGLDrawingBuffer::Create(
       webgl_context, desired_size, want_alpha_channel, want_depth_buffer,
       want_stencil_buffer, want_antialiasing, want_multiview);
 
@@ -73,16 +73,16 @@
     return nullptr;
   }
 
-  return new VRWebGLLayer(session, drawing_buffer);
+  return new XRWebGLLayer(session, drawing_buffer);
 }
 
-VRWebGLLayer::VRWebGLLayer(VRSession* session,
-                           VRWebGLDrawingBuffer* drawing_buffer)
-    : VRLayer(session, kVRWebGLLayerType), drawing_buffer_(drawing_buffer) {
+XRWebGLLayer::XRWebGLLayer(XRSession* session,
+                           XRWebGLDrawingBuffer* drawing_buffer)
+    : XRLayer(session, kXRWebGLLayerType), drawing_buffer_(drawing_buffer) {
   DCHECK(drawing_buffer);
 }
 
-void VRWebGLLayer::getVRWebGLRenderingContext(
+void XRWebGLLayer::getXRWebGLRenderingContext(
     WebGLRenderingContextOrWebGL2RenderingContext& result) const {
   WebGLRenderingContextBase* webgl_context = drawing_buffer_->webgl_context();
   if (webgl_context->Version() == 2) {
@@ -94,7 +94,7 @@
   }
 }
 
-void VRWebGLLayer::requestViewportScaling(double scale_factor) {
+void XRWebGLLayer::requestViewportScaling(double scale_factor) {
   // Clamp the developer-requested viewport size to ensure it's not too
   // small to see or larger than the framebuffer.
   scale_factor =
@@ -106,49 +106,49 @@
   }
 }
 
-VRViewport* VRWebGLLayer::GetViewport(VRView::Eye eye) {
+XRViewport* XRWebGLLayer::GetViewport(XRView::Eye eye) {
   if (viewports_dirty_)
     UpdateViewports();
 
-  if (eye == VRView::kEyeLeft)
+  if (eye == XRView::kEyeLeft)
     return left_viewport_;
 
   return right_viewport_;
 }
 
-void VRWebGLLayer::UpdateViewports() {
+void XRWebGLLayer::UpdateViewports() {
   long framebuffer_width = framebufferWidth();
   long framebuffer_height = framebufferHeight();
 
   if (session()->exclusive()) {
     left_viewport_ =
-        new VRViewport(0, 0, framebuffer_width * 0.5 * viewport_scale_,
+        new XRViewport(0, 0, framebuffer_width * 0.5 * viewport_scale_,
                        framebuffer_height * viewport_scale_);
     right_viewport_ =
-        new VRViewport(framebuffer_width * 0.5 * viewport_scale_, 0,
+        new XRViewport(framebuffer_width * 0.5 * viewport_scale_, 0,
                        framebuffer_width * 0.5 * viewport_scale_,
                        framebuffer_height * viewport_scale_);
   } else {
-    left_viewport_ = new VRViewport(0, 0, framebuffer_width * viewport_scale_,
+    left_viewport_ = new XRViewport(0, 0, framebuffer_width * viewport_scale_,
                                     framebuffer_height * viewport_scale_);
   }
 
   viewports_dirty_ = false;
 }
 
-void VRWebGLLayer::OnFrameStart() {
+void XRWebGLLayer::OnFrameStart() {
   drawing_buffer_->MarkFramebufferComplete(true);
 }
 
-void VRWebGLLayer::OnFrameEnd() {
+void XRWebGLLayer::OnFrameEnd() {
   drawing_buffer_->MarkFramebufferComplete(false);
 }
 
-void VRWebGLLayer::Trace(blink::Visitor* visitor) {
+void XRWebGLLayer::Trace(blink::Visitor* visitor) {
   visitor->Trace(left_viewport_);
   visitor->Trace(right_viewport_);
   visitor->Trace(drawing_buffer_);
-  VRLayer::Trace(visitor);
+  XRLayer::Trace(visitor);
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.h b/third_party/WebKit/Source/modules/xr/XRWebGLLayer.h
similarity index 70%
rename from third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.h
rename to third_party/WebKit/Source/modules/xr/XRWebGLLayer.h
index a6f4ca5..759365a4 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.h
+++ b/third_party/WebKit/Source/modules/xr/XRWebGLLayer.h
@@ -2,33 +2,33 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef VRWebGLLayer_h
-#define VRWebGLLayer_h
+#ifndef XRWebGLLayer_h
+#define XRWebGLLayer_h
 
 #include "bindings/modules/v8/webgl_rendering_context_or_webgl2_rendering_context.h"
-#include "modules/vr/latest/VRLayer.h"
-#include "modules/vr/latest/VRWebGLDrawingBuffer.h"
-#include "modules/vr/latest/VRWebGLLayerInit.h"
+#include "modules/xr/XRLayer.h"
+#include "modules/xr/XRWebGLDrawingBuffer.h"
+#include "modules/xr/XRWebGLLayerInit.h"
 
 namespace blink {
 
 class WebGLFramebuffer;
 class WebGLRenderingContextBase;
-class VRSession;
+class XRSession;
 
-class VRWebGLLayer final : public VRLayer {
+class XRWebGLLayer final : public XRLayer {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  static VRWebGLLayer* Create(
-      VRSession*,
+  static XRWebGLLayer* Create(
+      XRSession*,
       const WebGLRenderingContextOrWebGL2RenderingContext&,
-      const VRWebGLLayerInit&);
+      const XRWebGLLayerInit&);
 
   WebGLRenderingContextBase* context() const {
     return drawing_buffer_->webgl_context();
   }
-  void getVRWebGLRenderingContext(
+  void getXRWebGLRenderingContext(
       WebGLRenderingContextOrWebGL2RenderingContext&) const;
 
   WebGLFramebuffer* framebuffer() const {
@@ -49,7 +49,7 @@
 
   void requestViewportScaling(double scale_factor);
 
-  VRViewport* GetViewport(VRView::Eye) override;
+  XRViewport* GetViewport(XRView::Eye) override;
 
   void UpdateViewports();
 
@@ -59,11 +59,11 @@
   virtual void Trace(blink::Visitor*);
 
  private:
-  VRWebGLLayer(VRSession*, VRWebGLDrawingBuffer*);
+  XRWebGLLayer(XRSession*, XRWebGLDrawingBuffer*);
 
-  Member<VRViewport> left_viewport_;
-  Member<VRViewport> right_viewport_;
-  Member<VRWebGLDrawingBuffer> drawing_buffer_;
+  Member<XRViewport> left_viewport_;
+  Member<XRViewport> right_viewport_;
+  Member<XRWebGLDrawingBuffer> drawing_buffer_;
 
   double viewport_scale_ = 1.0;
   bool viewports_dirty_ = true;
@@ -71,4 +71,4 @@
 
 }  // namespace blink
 
-#endif  // VRWebGLLayer_h
+#endif  // XRWebGLLayer_h
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.idl b/third_party/WebKit/Source/modules/xr/XRWebGLLayer.idl
similarity index 62%
rename from third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.idl
rename to third_party/WebKit/Source/modules/xr/XRWebGLLayer.idl
index 5732556..359185f 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRWebGLLayer.idl
+++ b/third_party/WebKit/Source/modules/xr/XRWebGLLayer.idl
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-typedef (WebGLRenderingContext or WebGL2RenderingContext) VRWebGLRenderingContext;
+typedef (WebGLRenderingContext or WebGL2RenderingContext) XRWebGLRenderingContext;
 
-// https://w3c.github.io/webvr/spec/latest/#vrwebgllayer-interface
+// https://immersive-web.github.io/webxr/spec/latest/#xrwebgllayer-interface
 [
     SecureContext,
     RuntimeEnabled=WebXR,
-    Constructor(VRSession session, VRWebGLRenderingContext context, optional VRWebGLLayerInit layerInit)
-] interface VRWebGLLayer : VRLayer {
-  [ImplementedAs=getVRWebGLRenderingContext] readonly attribute VRWebGLRenderingContext context;
+    Constructor(XRSession session, XRWebGLRenderingContext context, optional XRWebGLLayerInit layerInit)
+] interface XRWebGLLayer : XRLayer {
+  [ImplementedAs=getXRWebGLRenderingContext] readonly attribute XRWebGLRenderingContext context;
   readonly attribute boolean antialias;
   readonly attribute boolean depth;
   readonly attribute boolean stencil;
diff --git a/third_party/WebKit/Source/modules/vr/latest/VRWebGLLayerInit.idl b/third_party/WebKit/Source/modules/xr/XRWebGLLayerInit.idl
similarity index 75%
rename from third_party/WebKit/Source/modules/vr/latest/VRWebGLLayerInit.idl
rename to third_party/WebKit/Source/modules/xr/XRWebGLLayerInit.idl
index 46aacb5..0071cc5 100644
--- a/third_party/WebKit/Source/modules/vr/latest/VRWebGLLayerInit.idl
+++ b/third_party/WebKit/Source/modules/xr/XRWebGLLayerInit.idl
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/webvr/spec/latest/#vrwebgllayerinit-dictionary
+// https://immersive-web.github.io/webxr/spec/latest/#xrwebgllayerinit-dictionary
 [
     SecureContext
-] dictionary VRWebGLLayerInit {
+] dictionary XRWebGLLayerInit {
   boolean antialias = true;
   boolean depth = true;
   boolean stencil = false;
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
index 8ee06d5..36288686 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
@@ -410,7 +410,7 @@
   while (!main_thread_only().delayed_incoming_queue.empty()) {
     Task& task =
         const_cast<Task&>(main_thread_only().delayed_incoming_queue.top());
-    if (task.task.IsCancelled()) {
+    if (!task.task || task.task.IsCancelled()) {
       main_thread_only().delayed_incoming_queue.pop();
       continue;
     }
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
index 5a371b5..d91fd17 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
@@ -477,7 +477,10 @@
       work_queue->TakeTaskFromWorkQueue();
 
   // It's possible the task was canceled, if so bail out.
-  if (pending_task.task.IsCancelled())
+  // The task should be non-null, but it seems to be possible to due
+  // a hard-to-track bug. The first check is a defence against this bug,
+  // and this check isn't expected to be true in practice.
+  if (!pending_task.task || pending_task.task.IsCancelled())
     return ProcessTaskResult::kExecuted;
 
   internal::TaskQueueImpl* queue = work_queue->task_queue();
diff --git a/third_party/WebKit/Source/platform/scheduler/base/work_queue.cc b/third_party/WebKit/Source/platform/scheduler/base/work_queue.cc
index e28f4814c..3d7d757 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/work_queue.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/work_queue.cc
@@ -97,7 +97,7 @@
   // Skip over canceled tasks, except for the last one since we always return
   // something.
   while (work_queue_.size() > 1u) {
-    if (work_queue_.front().task.IsCancelled()) {
+    if (!work_queue_.front().task || work_queue_.front().task.IsCancelled()) {
       work_queue_.pop_front();
     } else {
       break;
diff --git a/third_party/WebKit/Tools/Scripts/audit-non-blink-usage.py b/third_party/WebKit/Tools/Scripts/audit-non-blink-usage.py
index 0de8fe2..c2c240a 100755
--- a/third_party/WebKit/Tools/Scripts/audit-non-blink-usage.py
+++ b/third_party/WebKit/Tools/Scripts/audit-non-blink-usage.py
@@ -127,6 +127,7 @@
             'third_party/WebKit/Source/core/html/media/',
             'third_party/WebKit/Source/modules/vr/',
             'third_party/WebKit/Source/modules/webgl/',
+            'third_party/WebKit/Source/modules/xr/',
         ],
         # These modules need access to GL drawing, cross-process image
         # transport, and related interfaces.
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py
index e16e852..de7c506 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py
@@ -357,9 +357,10 @@
             processed = actual.replace('LayoutNGBlockFlow', 'LayoutBlockFlow').replace('LayoutNGListItem', 'LayoutListItem')
             return not self._port.do_text_results_differ(expected, processed)
 
-        # LayoutNG name mismatch
+        # LayoutNG name mismatch (e.g., LayoutBlockFlow vs. LayoutNGBlockFlow)
+        # is treated as pass
         if is_ng_name_mismatch(expected_text, normalized_actual_text):
-            return [test_failures.FailureLayoutNGNameMismatch()]
+            return []
 
         # General text mismatch
         if self._port.do_text_results_differ(
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py
index 77aea8ae..210a118 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_failures.py
@@ -216,15 +216,6 @@
         return 'spaces, tabs and newlines only'
 
 
-class FailureLayoutNGNameMismatch(FailureTextMismatch):
-
-    def message(self):
-        return 'text diff due to LayoutNG name mismatch'
-
-    def text_mismatch_category(self):
-        return 'LayoutNG name mismatch'
-
-
 class FailureMissingImageHash(TestFailure):
 
     def message(self):
@@ -313,7 +304,7 @@
                        FailureTestHarnessAssertion,
                        FailureTextMismatch, FailureSpacesAndTabsTextMismatch,
                        FailureLineBreaksTextMismatch, FailureSpaceTabLineBreakTextMismatch,
-                       FailureLayoutNGNameMismatch, FailureMissingImageHash,
+                       FailureMissingImageHash,
                        FailureMissingImage, FailureImageHashMismatch,
                        FailureImageHashIncorrect, FailureReftestMismatch,
                        FailureReftestMismatchDidNotOccur,
diff --git a/tools/cfi/blacklist.txt b/tools/cfi/blacklist.txt
index 8e86ab00..80704203 100644
--- a/tools/cfi/blacklist.txt
+++ b/tools/cfi/blacklist.txt
@@ -154,6 +154,9 @@
 src:*device/udev_linux/udev1_loader.cc
 src:*net/proxy/proxy_config_service_linux.cc
 
+# Calls to auto-generated stubs by ui/gl/generate_bindings.py
+src:*ui/gl/gl_bindings_autogen_*
+
 src:*components/os_crypt/*
 src:*chrome/browser/password_manager/native_backend_libsecret*
 
diff --git a/ui/gl/egl_api_unittest.cc b/ui/gl/egl_api_unittest.cc
index b535fdb..1d8babc 100644
--- a/ui/gl/egl_api_unittest.cc
+++ b/ui/gl/egl_api_unittest.cc
@@ -18,14 +18,13 @@
     fake_extension_string_ = "";
 
     // TODO(dyen): Add a way to bind mock drivers for testing.
-    auto writer = base::AutoWritableMemory::Create(g_driver_egl);
-    g_driver_egl->ClearBindings();
-    g_driver_egl->fn.eglInitializeFn = &FakeInitialize;
-    g_driver_egl->fn.eglQueryStringFn = &FakeQueryString;
-    g_driver_egl->fn.eglGetCurrentDisplayFn = &FakeGetCurrentDisplay;
-    g_driver_egl->fn.eglGetDisplayFn = &FakeGetDisplay;
-    g_driver_egl->fn.eglGetErrorFn = &FakeGetError;
-    g_driver_egl->fn.eglGetProcAddressFn = &FakeGetProcAddress;
+    g_driver_egl.ClearBindings();
+    g_driver_egl.fn.eglInitializeFn = &FakeInitialize;
+    g_driver_egl.fn.eglQueryStringFn = &FakeQueryString;
+    g_driver_egl.fn.eglGetCurrentDisplayFn = &FakeGetCurrentDisplay;
+    g_driver_egl.fn.eglGetDisplayFn = &FakeGetDisplay;
+    g_driver_egl.fn.eglGetErrorFn = &FakeGetError;
+    g_driver_egl.fn.eglGetProcAddressFn = &FakeGetProcAddress;
 
     SetGLImplementation(kGLImplementationEGLGLES2);
   }
@@ -33,8 +32,7 @@
   void TearDown() override {
     g_current_egl_context = nullptr;
     api_.reset(nullptr);
-    auto writer = base::AutoWritableMemory::Create(g_driver_egl);
-    g_driver_egl->ClearBindings();
+    g_driver_egl.ClearBindings();
 
     fake_client_extension_string_ = "";
     fake_extension_string_ = "";
@@ -43,14 +41,13 @@
   void InitializeAPI(const char* disabled_extensions) {
     api_.reset(new RealEGLApi());
     g_current_egl_context = api_.get();
-    api_->Initialize(&*g_driver_egl);
+    api_->Initialize(&g_driver_egl);
     if (disabled_extensions) {
       SetDisabledExtensionsEGL(disabled_extensions);
     }
-    auto writer = base::AutoWritableMemory::Create(g_driver_egl);
-    g_driver_egl->InitializeClientExtensionBindings();
+    g_driver_egl.InitializeClientExtensionBindings();
     GLSurfaceEGL::InitializeDisplay(EGL_DEFAULT_DISPLAY);
-    g_driver_egl->InitializeExtensionBindings();
+    g_driver_egl.InitializeExtensionBindings();
   }
 
   void SetFakeExtensionString(const char* fake_string,
@@ -116,11 +113,11 @@
   SetFakeExtensionString(kFakeExtensions, kFakeClientExtensions);
   InitializeAPI(nullptr);
 
-  EXPECT_TRUE(g_driver_egl->ext.b_EGL_KHR_fence_sync);
+  EXPECT_TRUE(g_driver_egl.ext.b_EGL_KHR_fence_sync);
 
   InitializeAPI(kFakeDisabledExtensions);
 
-  EXPECT_FALSE(g_driver_egl->ext.b_EGL_KHR_fence_sync);
+  EXPECT_FALSE(g_driver_egl.ext.b_EGL_KHR_fence_sync);
 }
 
 TEST_F(EGLApiTest, DisabledExtensionStringTest) {
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py
index a559a5d..f5c2c990 100755
--- a/ui/gl/generate_bindings.py
+++ b/ui/gl/generate_bindings.py
@@ -2661,9 +2661,7 @@
   """Generates gl_bindings_autogen_x.cc"""
 
   set_header_name = "ui/gl/gl_" + set_name.lower() + "_api_implementation.h"
-  include_list = [ 'base/compiler_specific.h',
-                   'base/memory/protected_memory.h',
-                   'base/trace_event/trace_event.h',
+  include_list = [ 'base/trace_event/trace_event.h',
                    'ui/gl/gl_enums.h',
                    'ui/gl/gl_bindings.h',
                    'ui/gl/gl_context.h',
@@ -2687,12 +2685,8 @@
 
   file.write('\n')
   if set_name != 'gl':
-    file.write('// Place the driver in protected memory so that it is set\n')
-    file.write('// read-only after it is initialized, preventing it from\n')
-    file.write('// being tampered with. See http://crbug.com/771365.\n')
-    file.write('PROTECTED_MEMORY_SECTION base::ProtectedMemory<Driver%s>\n' %
-        set_name.upper())
-    file.write('    g_driver_%s;\n' % set_name.lower())
+    file.write('Driver%s g_driver_%s;  // Exists in .bss\n' % (
+        set_name.upper(), set_name.lower()))
   file.write('\n')
 
   # Write stub functions that take the place of some functions before a context
@@ -2864,7 +2858,6 @@
     return_type = func['return_type']
     arguments = func['arguments']
     file.write('\n')
-    file.write('DISABLE_CFI_ICALL\n')
     file.write('%s %sApiBase::%sFn(%s) {\n' %
         (return_type, set_name.upper(), function_name, arguments))
     argument_names = MakeArgNames(arguments)
@@ -2882,7 +2875,6 @@
     return_type = func['return_type']
     arguments = func['arguments']
     file.write('\n')
-    file.write('DISABLE_CFI_ICALL\n')
     file.write('%s Trace%sApi::%sFn(%s) {\n' %
         (return_type, set_name.upper(), function_name, arguments))
     argument_names = MakeArgNames(arguments)
@@ -2901,7 +2893,6 @@
     return_type = func['return_type']
     arguments = func['arguments']
     file.write('\n')
-    file.write('DISABLE_CFI_ICALL\n')
     file.write('%s Debug%sApi::%sFn(%s) {\n' %
         (return_type, set_name.upper(), func['known_as'], arguments))
     argument_names = re.sub(
diff --git a/ui/gl/gl_bindings.h b/ui/gl/gl_bindings.h
index 52ecce7..2fc9661 100644
--- a/ui/gl/gl_bindings.h
+++ b/ui/gl/gl_bindings.h
@@ -37,7 +37,6 @@
 #include <string>
 
 #include "base/logging.h"
-#include "base/memory/protected_memory.h"
 #include "base/threading/thread_local.h"
 #include "build/build_config.h"
 #include "ui/gl/extension_set.h"
@@ -530,21 +529,21 @@
 GL_EXPORT extern base::ThreadLocalPointer<CurrentGL>* g_current_gl_context_tls;
 
 GL_EXPORT extern OSMESAApi* g_current_osmesa_context;
-GL_EXPORT extern base::ProtectedMemory<DriverOSMESA> g_driver_osmesa;
+GL_EXPORT extern DriverOSMESA g_driver_osmesa;
 
 #if defined(USE_EGL)
 GL_EXPORT extern EGLApi* g_current_egl_context;
-GL_EXPORT extern base::ProtectedMemory<DriverEGL> g_driver_egl;
+GL_EXPORT extern DriverEGL g_driver_egl;
 #endif
 
 #if defined(OS_WIN)
 GL_EXPORT extern WGLApi* g_current_wgl_context;
-GL_EXPORT extern base::ProtectedMemory<DriverWGL> g_driver_wgl;
+GL_EXPORT extern DriverWGL g_driver_wgl;
 #endif
 
 #if defined(USE_GLX)
 GL_EXPORT extern GLXApi* g_current_glx_context;
-GL_EXPORT extern base::ProtectedMemory<DriverGLX> g_driver_glx;
+GL_EXPORT extern DriverGLX g_driver_glx;
 #endif
 
 }  // namespace gl
diff --git a/ui/gl/gl_bindings_autogen_egl.cc b/ui/gl/gl_bindings_autogen_egl.cc
index 6007320a..4a1c1ed 100644
--- a/ui/gl/gl_bindings_autogen_egl.cc
+++ b/ui/gl/gl_bindings_autogen_egl.cc
@@ -10,8 +10,6 @@
 
 #include <string>
 
-#include "base/compiler_specific.h"
-#include "base/memory/protected_memory.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
@@ -22,10 +20,7 @@
 
 namespace gl {
 
-// Place the driver in protected memory so that it is set
-// read-only after it is initialized, preventing it from
-// being tampered with. See http://crbug.com/771365.
-PROTECTED_MEMORY_SECTION base::ProtectedMemory<DriverEGL> g_driver_egl;
+DriverEGL g_driver_egl;  // Exists in .bss
 
 void DriverEGL::InitializeStaticBindings() {
   // Ensure struct has been zero-initialized.
@@ -360,19 +355,16 @@
   memset(this, 0, sizeof(*this));
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglBindAPIFn(EGLenum api) {
   return driver_->fn.eglBindAPIFn(api);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglBindTexImageFn(EGLDisplay dpy,
                                          EGLSurface surface,
                                          EGLint buffer) {
   return driver_->fn.eglBindTexImageFn(dpy, surface, buffer);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglChooseConfigFn(EGLDisplay dpy,
                                          const EGLint* attrib_list,
                                          EGLConfig* configs,
@@ -382,7 +374,6 @@
                                        num_config);
 }
 
-DISABLE_CFI_ICALL
 EGLint EGLApiBase::eglClientWaitSyncKHRFn(EGLDisplay dpy,
                                           EGLSyncKHR sync,
                                           EGLint flags,
@@ -390,14 +381,12 @@
   return driver_->fn.eglClientWaitSyncKHRFn(dpy, sync, flags, timeout);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglCopyBuffersFn(EGLDisplay dpy,
                                         EGLSurface surface,
                                         EGLNativePixmapType target) {
   return driver_->fn.eglCopyBuffersFn(dpy, surface, target);
 }
 
-DISABLE_CFI_ICALL
 EGLContext EGLApiBase::eglCreateContextFn(EGLDisplay dpy,
                                           EGLConfig config,
                                           EGLContext share_context,
@@ -406,7 +395,6 @@
                                         attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLImageKHR EGLApiBase::eglCreateImageKHRFn(EGLDisplay dpy,
                                             EGLContext ctx,
                                             EGLenum target,
@@ -415,7 +403,6 @@
   return driver_->fn.eglCreateImageKHRFn(dpy, ctx, target, buffer, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSurface EGLApiBase::eglCreatePbufferFromClientBufferFn(
     EGLDisplay dpy,
     EGLenum buftype,
@@ -426,14 +413,12 @@
                                                         config, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSurface EGLApiBase::eglCreatePbufferSurfaceFn(EGLDisplay dpy,
                                                  EGLConfig config,
                                                  const EGLint* attrib_list) {
   return driver_->fn.eglCreatePbufferSurfaceFn(dpy, config, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSurface EGLApiBase::eglCreatePixmapSurfaceFn(EGLDisplay dpy,
                                                 EGLConfig config,
                                                 EGLNativePixmapType pixmap,
@@ -441,13 +426,11 @@
   return driver_->fn.eglCreatePixmapSurfaceFn(dpy, config, pixmap, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLStreamKHR EGLApiBase::eglCreateStreamKHRFn(EGLDisplay dpy,
                                               const EGLint* attrib_list) {
   return driver_->fn.eglCreateStreamKHRFn(dpy, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglCreateStreamProducerD3DTextureANGLEFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -456,14 +439,12 @@
                                                               attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSyncKHR EGLApiBase::eglCreateSyncKHRFn(EGLDisplay dpy,
                                           EGLenum type,
                                           const EGLint* attrib_list) {
   return driver_->fn.eglCreateSyncKHRFn(dpy, type, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSurface EGLApiBase::eglCreateWindowSurfaceFn(EGLDisplay dpy,
                                                 EGLConfig config,
                                                 EGLNativeWindowType win,
@@ -471,39 +452,32 @@
   return driver_->fn.eglCreateWindowSurfaceFn(dpy, config, win, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglDestroyContextFn(EGLDisplay dpy, EGLContext ctx) {
   return driver_->fn.eglDestroyContextFn(dpy, ctx);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglDestroyImageKHRFn(EGLDisplay dpy, EGLImageKHR image) {
   return driver_->fn.eglDestroyImageKHRFn(dpy, image);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglDestroyStreamKHRFn(EGLDisplay dpy,
                                              EGLStreamKHR stream) {
   return driver_->fn.eglDestroyStreamKHRFn(dpy, stream);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglDestroySurfaceFn(EGLDisplay dpy, EGLSurface surface) {
   return driver_->fn.eglDestroySurfaceFn(dpy, surface);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglDestroySyncKHRFn(EGLDisplay dpy, EGLSyncKHR sync) {
   return driver_->fn.eglDestroySyncKHRFn(dpy, sync);
 }
 
-DISABLE_CFI_ICALL
 EGLint EGLApiBase::eglDupNativeFenceFDANDROIDFn(EGLDisplay dpy,
                                                 EGLSyncKHR sync) {
   return driver_->fn.eglDupNativeFenceFDANDROIDFn(dpy, sync);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglExportDMABUFImageMESAFn(EGLDisplay dpy,
                                                   EGLImageKHR image,
                                                   int* fds,
@@ -513,7 +487,6 @@
                                                 offsets);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglExportDMABUFImageQueryMESAFn(
     EGLDisplay dpy,
     EGLImageKHR image,
@@ -524,7 +497,6 @@
                                                      num_planes, modifiers);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetCompositorTimingANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -535,7 +507,6 @@
       dpy, surface, numTimestamps, names, values);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetCompositorTimingSupportedANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -544,7 +515,6 @@
                                                               timestamp);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetConfigAttribFn(EGLDisplay dpy,
                                             EGLConfig config,
                                             EGLint attribute,
@@ -552,7 +522,6 @@
   return driver_->fn.eglGetConfigAttribFn(dpy, config, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetConfigsFn(EGLDisplay dpy,
                                        EGLConfig* configs,
                                        EGLint config_size,
@@ -560,32 +529,26 @@
   return driver_->fn.eglGetConfigsFn(dpy, configs, config_size, num_config);
 }
 
-DISABLE_CFI_ICALL
 EGLContext EGLApiBase::eglGetCurrentContextFn(void) {
   return driver_->fn.eglGetCurrentContextFn();
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay EGLApiBase::eglGetCurrentDisplayFn(void) {
   return driver_->fn.eglGetCurrentDisplayFn();
 }
 
-DISABLE_CFI_ICALL
 EGLSurface EGLApiBase::eglGetCurrentSurfaceFn(EGLint readdraw) {
   return driver_->fn.eglGetCurrentSurfaceFn(readdraw);
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay EGLApiBase::eglGetDisplayFn(EGLNativeDisplayType display_id) {
   return driver_->fn.eglGetDisplayFn(display_id);
 }
 
-DISABLE_CFI_ICALL
 EGLint EGLApiBase::eglGetErrorFn(void) {
   return driver_->fn.eglGetErrorFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetFrameTimestampsANDROIDFn(EGLDisplay dpy,
                                                       EGLSurface surface,
                                                       EGLuint64KHR frameId,
@@ -596,7 +559,6 @@
       dpy, surface, frameId, numTimestamps, timestamps, values);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetFrameTimestampSupportedANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -605,20 +567,17 @@
                                                             timestamp);
 }
 
-DISABLE_CFI_ICALL
 EGLClientBuffer EGLApiBase::eglGetNativeClientBufferANDROIDFn(
     const struct AHardwareBuffer* ahardwarebuffer) {
   return driver_->fn.eglGetNativeClientBufferANDROIDFn(ahardwarebuffer);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetNextFrameIdANDROIDFn(EGLDisplay dpy,
                                                   EGLSurface surface,
                                                   EGLuint64KHR* frameId) {
   return driver_->fn.eglGetNextFrameIdANDROIDFn(dpy, surface, frameId);
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay EGLApiBase::eglGetPlatformDisplayEXTFn(EGLenum platform,
                                                   void* native_display,
                                                   const EGLint* attrib_list) {
@@ -626,13 +585,11 @@
                                                 attrib_list);
 }
 
-DISABLE_CFI_ICALL
 __eglMustCastToProperFunctionPointerType EGLApiBase::eglGetProcAddressFn(
     const char* procname) {
   return driver_->fn.eglGetProcAddressFn(procname);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetSyncAttribKHRFn(EGLDisplay dpy,
                                              EGLSyncKHR sync,
                                              EGLint attribute,
@@ -640,7 +597,6 @@
   return driver_->fn.eglGetSyncAttribKHRFn(dpy, sync, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglGetSyncValuesCHROMIUMFn(EGLDisplay dpy,
                                                   EGLSurface surface,
                                                   EGLuint64CHROMIUM* ust,
@@ -649,7 +605,6 @@
   return driver_->fn.eglGetSyncValuesCHROMIUMFn(dpy, surface, ust, msc, sbc);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglImageFlushExternalEXTFn(
     EGLDisplay dpy,
     EGLImageKHR image,
@@ -657,14 +612,12 @@
   return driver_->fn.eglImageFlushExternalEXTFn(dpy, image, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglInitializeFn(EGLDisplay dpy,
                                        EGLint* major,
                                        EGLint* minor) {
   return driver_->fn.eglInitializeFn(dpy, major, minor);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglMakeCurrentFn(EGLDisplay dpy,
                                         EGLSurface draw,
                                         EGLSurface read,
@@ -672,7 +625,6 @@
   return driver_->fn.eglMakeCurrentFn(dpy, draw, read, ctx);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglPostSubBufferNVFn(EGLDisplay dpy,
                                             EGLSurface surface,
                                             EGLint x,
@@ -682,13 +634,11 @@
   return driver_->fn.eglPostSubBufferNVFn(dpy, surface, x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 EGLint EGLApiBase::eglProgramCacheGetAttribANGLEFn(EGLDisplay dpy,
                                                    EGLenum attrib) {
   return driver_->fn.eglProgramCacheGetAttribANGLEFn(dpy, attrib);
 }
 
-DISABLE_CFI_ICALL
 void EGLApiBase::eglProgramCachePopulateANGLEFn(EGLDisplay dpy,
                                                 const void* key,
                                                 EGLint keysize,
@@ -698,7 +648,6 @@
                                              binarysize);
 }
 
-DISABLE_CFI_ICALL
 void EGLApiBase::eglProgramCacheQueryANGLEFn(EGLDisplay dpy,
                                              EGLint index,
                                              void* key,
@@ -709,19 +658,16 @@
                                           binarysize);
 }
 
-DISABLE_CFI_ICALL
 EGLint EGLApiBase::eglProgramCacheResizeANGLEFn(EGLDisplay dpy,
                                                 EGLint limit,
                                                 EGLenum mode) {
   return driver_->fn.eglProgramCacheResizeANGLEFn(dpy, limit, mode);
 }
 
-DISABLE_CFI_ICALL
 EGLenum EGLApiBase::eglQueryAPIFn(void) {
   return driver_->fn.eglQueryAPIFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglQueryContextFn(EGLDisplay dpy,
                                          EGLContext ctx,
                                          EGLint attribute,
@@ -729,7 +675,6 @@
   return driver_->fn.eglQueryContextFn(dpy, ctx, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglQueryStreamKHRFn(EGLDisplay dpy,
                                            EGLStreamKHR stream,
                                            EGLenum attribute,
@@ -737,7 +682,6 @@
   return driver_->fn.eglQueryStreamKHRFn(dpy, stream, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglQueryStreamu64KHRFn(EGLDisplay dpy,
                                               EGLStreamKHR stream,
                                               EGLenum attribute,
@@ -745,12 +689,10 @@
   return driver_->fn.eglQueryStreamu64KHRFn(dpy, stream, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 const char* EGLApiBase::eglQueryStringFn(EGLDisplay dpy, EGLint name) {
   return driver_->fn.eglQueryStringFn(dpy, name);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglQuerySurfaceFn(EGLDisplay dpy,
                                          EGLSurface surface,
                                          EGLint attribute,
@@ -758,7 +700,6 @@
   return driver_->fn.eglQuerySurfaceFn(dpy, surface, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglQuerySurfacePointerANGLEFn(EGLDisplay dpy,
                                                      EGLSurface surface,
                                                      EGLint attribute,
@@ -767,19 +708,16 @@
                                                    value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglReleaseTexImageFn(EGLDisplay dpy,
                                             EGLSurface surface,
                                             EGLint buffer) {
   return driver_->fn.eglReleaseTexImageFn(dpy, surface, buffer);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglReleaseThreadFn(void) {
   return driver_->fn.eglReleaseThreadFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglStreamAttribKHRFn(EGLDisplay dpy,
                                             EGLStreamKHR stream,
                                             EGLenum attribute,
@@ -787,13 +725,11 @@
   return driver_->fn.eglStreamAttribKHRFn(dpy, stream, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglStreamConsumerAcquireKHRFn(EGLDisplay dpy,
                                                      EGLStreamKHR stream) {
   return driver_->fn.eglStreamConsumerAcquireKHRFn(dpy, stream);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglStreamConsumerGLTextureExternalAttribsNVFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -802,20 +738,17 @@
                                                                    attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglStreamConsumerGLTextureExternalKHRFn(
     EGLDisplay dpy,
     EGLStreamKHR stream) {
   return driver_->fn.eglStreamConsumerGLTextureExternalKHRFn(dpy, stream);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglStreamConsumerReleaseKHRFn(EGLDisplay dpy,
                                                      EGLStreamKHR stream) {
   return driver_->fn.eglStreamConsumerReleaseKHRFn(dpy, stream);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglStreamPostD3DTextureANGLEFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -825,7 +758,6 @@
                                                     attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglSurfaceAttribFn(EGLDisplay dpy,
                                           EGLSurface surface,
                                           EGLint attribute,
@@ -833,12 +765,10 @@
   return driver_->fn.eglSurfaceAttribFn(dpy, surface, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglSwapBuffersFn(EGLDisplay dpy, EGLSurface surface) {
   return driver_->fn.eglSwapBuffersFn(dpy, surface);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglSwapBuffersWithDamageKHRFn(EGLDisplay dpy,
                                                      EGLSurface surface,
                                                      EGLint* rects,
@@ -847,45 +777,37 @@
                                                    n_rects);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglSwapIntervalFn(EGLDisplay dpy, EGLint interval) {
   return driver_->fn.eglSwapIntervalFn(dpy, interval);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglTerminateFn(EGLDisplay dpy) {
   return driver_->fn.eglTerminateFn(dpy);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglWaitClientFn(void) {
   return driver_->fn.eglWaitClientFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglWaitGLFn(void) {
   return driver_->fn.eglWaitGLFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean EGLApiBase::eglWaitNativeFn(EGLint engine) {
   return driver_->fn.eglWaitNativeFn(engine);
 }
 
-DISABLE_CFI_ICALL
 EGLint EGLApiBase::eglWaitSyncKHRFn(EGLDisplay dpy,
                                     EGLSyncKHR sync,
                                     EGLint flags) {
   return driver_->fn.eglWaitSyncKHRFn(dpy, sync, flags);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglBindAPIFn(EGLenum api) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglBindAPI")
   return egl_api_->eglBindAPIFn(api);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglBindTexImageFn(EGLDisplay dpy,
                                           EGLSurface surface,
                                           EGLint buffer) {
@@ -893,7 +815,6 @@
   return egl_api_->eglBindTexImageFn(dpy, surface, buffer);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglChooseConfigFn(EGLDisplay dpy,
                                           const EGLint* attrib_list,
                                           EGLConfig* configs,
@@ -904,7 +825,6 @@
                                      num_config);
 }
 
-DISABLE_CFI_ICALL
 EGLint TraceEGLApi::eglClientWaitSyncKHRFn(EGLDisplay dpy,
                                            EGLSyncKHR sync,
                                            EGLint flags,
@@ -913,7 +833,6 @@
   return egl_api_->eglClientWaitSyncKHRFn(dpy, sync, flags, timeout);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglCopyBuffersFn(EGLDisplay dpy,
                                          EGLSurface surface,
                                          EGLNativePixmapType target) {
@@ -921,7 +840,6 @@
   return egl_api_->eglCopyBuffersFn(dpy, surface, target);
 }
 
-DISABLE_CFI_ICALL
 EGLContext TraceEGLApi::eglCreateContextFn(EGLDisplay dpy,
                                            EGLConfig config,
                                            EGLContext share_context,
@@ -930,7 +848,6 @@
   return egl_api_->eglCreateContextFn(dpy, config, share_context, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLImageKHR TraceEGLApi::eglCreateImageKHRFn(EGLDisplay dpy,
                                              EGLContext ctx,
                                              EGLenum target,
@@ -940,7 +857,6 @@
   return egl_api_->eglCreateImageKHRFn(dpy, ctx, target, buffer, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSurface TraceEGLApi::eglCreatePbufferFromClientBufferFn(
     EGLDisplay dpy,
     EGLenum buftype,
@@ -953,7 +869,6 @@
                                                       config, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSurface TraceEGLApi::eglCreatePbufferSurfaceFn(EGLDisplay dpy,
                                                   EGLConfig config,
                                                   const EGLint* attrib_list) {
@@ -961,7 +876,6 @@
   return egl_api_->eglCreatePbufferSurfaceFn(dpy, config, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSurface TraceEGLApi::eglCreatePixmapSurfaceFn(EGLDisplay dpy,
                                                  EGLConfig config,
                                                  EGLNativePixmapType pixmap,
@@ -970,14 +884,12 @@
   return egl_api_->eglCreatePixmapSurfaceFn(dpy, config, pixmap, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLStreamKHR TraceEGLApi::eglCreateStreamKHRFn(EGLDisplay dpy,
                                                const EGLint* attrib_list) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglCreateStreamKHR")
   return egl_api_->eglCreateStreamKHRFn(dpy, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglCreateStreamProducerD3DTextureANGLEFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -988,7 +900,6 @@
                                                             attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSyncKHR TraceEGLApi::eglCreateSyncKHRFn(EGLDisplay dpy,
                                            EGLenum type,
                                            const EGLint* attrib_list) {
@@ -996,7 +907,6 @@
   return egl_api_->eglCreateSyncKHRFn(dpy, type, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLSurface TraceEGLApi::eglCreateWindowSurfaceFn(EGLDisplay dpy,
                                                  EGLConfig config,
                                                  EGLNativeWindowType win,
@@ -1005,47 +915,40 @@
   return egl_api_->eglCreateWindowSurfaceFn(dpy, config, win, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglDestroyContextFn(EGLDisplay dpy, EGLContext ctx) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglDestroyContext")
   return egl_api_->eglDestroyContextFn(dpy, ctx);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglDestroyImageKHRFn(EGLDisplay dpy,
                                              EGLImageKHR image) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglDestroyImageKHR")
   return egl_api_->eglDestroyImageKHRFn(dpy, image);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglDestroyStreamKHRFn(EGLDisplay dpy,
                                               EGLStreamKHR stream) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglDestroyStreamKHR")
   return egl_api_->eglDestroyStreamKHRFn(dpy, stream);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglDestroySurfaceFn(EGLDisplay dpy,
                                             EGLSurface surface) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglDestroySurface")
   return egl_api_->eglDestroySurfaceFn(dpy, surface);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglDestroySyncKHRFn(EGLDisplay dpy, EGLSyncKHR sync) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglDestroySyncKHR")
   return egl_api_->eglDestroySyncKHRFn(dpy, sync);
 }
 
-DISABLE_CFI_ICALL
 EGLint TraceEGLApi::eglDupNativeFenceFDANDROIDFn(EGLDisplay dpy,
                                                  EGLSyncKHR sync) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglDupNativeFenceFDANDROID")
   return egl_api_->eglDupNativeFenceFDANDROIDFn(dpy, sync);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglExportDMABUFImageMESAFn(EGLDisplay dpy,
                                                    EGLImageKHR image,
                                                    int* fds,
@@ -1056,7 +959,6 @@
                                               offsets);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglExportDMABUFImageQueryMESAFn(
     EGLDisplay dpy,
     EGLImageKHR image,
@@ -1069,7 +971,6 @@
                                                    num_planes, modifiers);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetCompositorTimingANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -1082,7 +983,6 @@
                                                    names, values);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetCompositorTimingSupportedANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -1093,7 +993,6 @@
                                                             timestamp);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetConfigAttribFn(EGLDisplay dpy,
                                              EGLConfig config,
                                              EGLint attribute,
@@ -1102,7 +1001,6 @@
   return egl_api_->eglGetConfigAttribFn(dpy, config, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetConfigsFn(EGLDisplay dpy,
                                         EGLConfig* configs,
                                         EGLint config_size,
@@ -1111,37 +1009,31 @@
   return egl_api_->eglGetConfigsFn(dpy, configs, config_size, num_config);
 }
 
-DISABLE_CFI_ICALL
 EGLContext TraceEGLApi::eglGetCurrentContextFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglGetCurrentContext")
   return egl_api_->eglGetCurrentContextFn();
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay TraceEGLApi::eglGetCurrentDisplayFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglGetCurrentDisplay")
   return egl_api_->eglGetCurrentDisplayFn();
 }
 
-DISABLE_CFI_ICALL
 EGLSurface TraceEGLApi::eglGetCurrentSurfaceFn(EGLint readdraw) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglGetCurrentSurface")
   return egl_api_->eglGetCurrentSurfaceFn(readdraw);
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay TraceEGLApi::eglGetDisplayFn(EGLNativeDisplayType display_id) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglGetDisplay")
   return egl_api_->eglGetDisplayFn(display_id);
 }
 
-DISABLE_CFI_ICALL
 EGLint TraceEGLApi::eglGetErrorFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglGetError")
   return egl_api_->eglGetErrorFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetFrameTimestampsANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -1155,7 +1047,6 @@
       dpy, surface, frameId, numTimestamps, timestamps, values);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetFrameTimestampSupportedANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -1166,7 +1057,6 @@
                                                           timestamp);
 }
 
-DISABLE_CFI_ICALL
 EGLClientBuffer TraceEGLApi::eglGetNativeClientBufferANDROIDFn(
     const struct AHardwareBuffer* ahardwarebuffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
@@ -1174,7 +1064,6 @@
   return egl_api_->eglGetNativeClientBufferANDROIDFn(ahardwarebuffer);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetNextFrameIdANDROIDFn(EGLDisplay dpy,
                                                    EGLSurface surface,
                                                    EGLuint64KHR* frameId) {
@@ -1182,7 +1071,6 @@
   return egl_api_->eglGetNextFrameIdANDROIDFn(dpy, surface, frameId);
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay TraceEGLApi::eglGetPlatformDisplayEXTFn(EGLenum platform,
                                                    void* native_display,
                                                    const EGLint* attrib_list) {
@@ -1191,14 +1079,12 @@
                                               attrib_list);
 }
 
-DISABLE_CFI_ICALL
 __eglMustCastToProperFunctionPointerType TraceEGLApi::eglGetProcAddressFn(
     const char* procname) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglGetProcAddress")
   return egl_api_->eglGetProcAddressFn(procname);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetSyncAttribKHRFn(EGLDisplay dpy,
                                               EGLSyncKHR sync,
                                               EGLint attribute,
@@ -1207,7 +1093,6 @@
   return egl_api_->eglGetSyncAttribKHRFn(dpy, sync, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglGetSyncValuesCHROMIUMFn(EGLDisplay dpy,
                                                    EGLSurface surface,
                                                    EGLuint64CHROMIUM* ust,
@@ -1217,7 +1102,6 @@
   return egl_api_->eglGetSyncValuesCHROMIUMFn(dpy, surface, ust, msc, sbc);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglImageFlushExternalEXTFn(
     EGLDisplay dpy,
     EGLImageKHR image,
@@ -1226,7 +1110,6 @@
   return egl_api_->eglImageFlushExternalEXTFn(dpy, image, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglInitializeFn(EGLDisplay dpy,
                                         EGLint* major,
                                         EGLint* minor) {
@@ -1234,7 +1117,6 @@
   return egl_api_->eglInitializeFn(dpy, major, minor);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglMakeCurrentFn(EGLDisplay dpy,
                                          EGLSurface draw,
                                          EGLSurface read,
@@ -1243,7 +1125,6 @@
   return egl_api_->eglMakeCurrentFn(dpy, draw, read, ctx);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglPostSubBufferNVFn(EGLDisplay dpy,
                                              EGLSurface surface,
                                              EGLint x,
@@ -1254,7 +1135,6 @@
   return egl_api_->eglPostSubBufferNVFn(dpy, surface, x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 EGLint TraceEGLApi::eglProgramCacheGetAttribANGLEFn(EGLDisplay dpy,
                                                     EGLenum attrib) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
@@ -1262,7 +1142,6 @@
   return egl_api_->eglProgramCacheGetAttribANGLEFn(dpy, attrib);
 }
 
-DISABLE_CFI_ICALL
 void TraceEGLApi::eglProgramCachePopulateANGLEFn(EGLDisplay dpy,
                                                  const void* key,
                                                  EGLint keysize,
@@ -1274,7 +1153,6 @@
                                            binarysize);
 }
 
-DISABLE_CFI_ICALL
 void TraceEGLApi::eglProgramCacheQueryANGLEFn(EGLDisplay dpy,
                                               EGLint index,
                                               void* key,
@@ -1286,7 +1164,6 @@
                                         binarysize);
 }
 
-DISABLE_CFI_ICALL
 EGLint TraceEGLApi::eglProgramCacheResizeANGLEFn(EGLDisplay dpy,
                                                  EGLint limit,
                                                  EGLenum mode) {
@@ -1294,13 +1171,11 @@
   return egl_api_->eglProgramCacheResizeANGLEFn(dpy, limit, mode);
 }
 
-DISABLE_CFI_ICALL
 EGLenum TraceEGLApi::eglQueryAPIFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglQueryAPI")
   return egl_api_->eglQueryAPIFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglQueryContextFn(EGLDisplay dpy,
                                           EGLContext ctx,
                                           EGLint attribute,
@@ -1309,7 +1184,6 @@
   return egl_api_->eglQueryContextFn(dpy, ctx, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglQueryStreamKHRFn(EGLDisplay dpy,
                                             EGLStreamKHR stream,
                                             EGLenum attribute,
@@ -1318,7 +1192,6 @@
   return egl_api_->eglQueryStreamKHRFn(dpy, stream, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglQueryStreamu64KHRFn(EGLDisplay dpy,
                                                EGLStreamKHR stream,
                                                EGLenum attribute,
@@ -1327,13 +1200,11 @@
   return egl_api_->eglQueryStreamu64KHRFn(dpy, stream, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 const char* TraceEGLApi::eglQueryStringFn(EGLDisplay dpy, EGLint name) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglQueryString")
   return egl_api_->eglQueryStringFn(dpy, name);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglQuerySurfaceFn(EGLDisplay dpy,
                                           EGLSurface surface,
                                           EGLint attribute,
@@ -1342,7 +1213,6 @@
   return egl_api_->eglQuerySurfaceFn(dpy, surface, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglQuerySurfacePointerANGLEFn(EGLDisplay dpy,
                                                       EGLSurface surface,
                                                       EGLint attribute,
@@ -1353,7 +1223,6 @@
                                                  value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglReleaseTexImageFn(EGLDisplay dpy,
                                              EGLSurface surface,
                                              EGLint buffer) {
@@ -1361,13 +1230,11 @@
   return egl_api_->eglReleaseTexImageFn(dpy, surface, buffer);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglReleaseThreadFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglReleaseThread")
   return egl_api_->eglReleaseThreadFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglStreamAttribKHRFn(EGLDisplay dpy,
                                              EGLStreamKHR stream,
                                              EGLenum attribute,
@@ -1376,7 +1243,6 @@
   return egl_api_->eglStreamAttribKHRFn(dpy, stream, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglStreamConsumerAcquireKHRFn(EGLDisplay dpy,
                                                       EGLStreamKHR stream) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
@@ -1384,7 +1250,6 @@
   return egl_api_->eglStreamConsumerAcquireKHRFn(dpy, stream);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglStreamConsumerGLTextureExternalAttribsNVFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -1395,7 +1260,6 @@
                                                                  attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglStreamConsumerGLTextureExternalKHRFn(
     EGLDisplay dpy,
     EGLStreamKHR stream) {
@@ -1404,7 +1268,6 @@
   return egl_api_->eglStreamConsumerGLTextureExternalKHRFn(dpy, stream);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglStreamConsumerReleaseKHRFn(EGLDisplay dpy,
                                                       EGLStreamKHR stream) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
@@ -1412,7 +1275,6 @@
   return egl_api_->eglStreamConsumerReleaseKHRFn(dpy, stream);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglStreamPostD3DTextureANGLEFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -1424,7 +1286,6 @@
                                                   attrib_list);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglSurfaceAttribFn(EGLDisplay dpy,
                                            EGLSurface surface,
                                            EGLint attribute,
@@ -1433,13 +1294,11 @@
   return egl_api_->eglSurfaceAttribFn(dpy, surface, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglSwapBuffersFn(EGLDisplay dpy, EGLSurface surface) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglSwapBuffers")
   return egl_api_->eglSwapBuffersFn(dpy, surface);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglSwapBuffersWithDamageKHRFn(EGLDisplay dpy,
                                                       EGLSurface surface,
                                                       EGLint* rects,
@@ -1449,37 +1308,31 @@
   return egl_api_->eglSwapBuffersWithDamageKHRFn(dpy, surface, rects, n_rects);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglSwapIntervalFn(EGLDisplay dpy, EGLint interval) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglSwapInterval")
   return egl_api_->eglSwapIntervalFn(dpy, interval);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglTerminateFn(EGLDisplay dpy) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglTerminate")
   return egl_api_->eglTerminateFn(dpy);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglWaitClientFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglWaitClient")
   return egl_api_->eglWaitClientFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglWaitGLFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglWaitGL")
   return egl_api_->eglWaitGLFn();
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean TraceEGLApi::eglWaitNativeFn(EGLint engine) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglWaitNative")
   return egl_api_->eglWaitNativeFn(engine);
 }
 
-DISABLE_CFI_ICALL
 EGLint TraceEGLApi::eglWaitSyncKHRFn(EGLDisplay dpy,
                                      EGLSyncKHR sync,
                                      EGLint flags) {
@@ -1487,7 +1340,6 @@
   return egl_api_->eglWaitSyncKHRFn(dpy, sync, flags);
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglBindAPIFn(EGLenum api) {
   GL_SERVICE_LOG("eglBindAPI"
                  << "(" << api << ")");
@@ -1496,7 +1348,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglBindTexImageFn(EGLDisplay dpy,
                                           EGLSurface surface,
                                           EGLint buffer) {
@@ -1507,7 +1358,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglChooseConfigFn(EGLDisplay dpy,
                                           const EGLint* attrib_list,
                                           EGLConfig* configs,
@@ -1524,7 +1374,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLint DebugEGLApi::eglClientWaitSyncKHRFn(EGLDisplay dpy,
                                            EGLSyncKHR sync,
                                            EGLint flags,
@@ -1537,7 +1386,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglCopyBuffersFn(EGLDisplay dpy,
                                          EGLSurface surface,
                                          EGLNativePixmapType target) {
@@ -1548,7 +1396,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLContext DebugEGLApi::eglCreateContextFn(EGLDisplay dpy,
                                            EGLConfig config,
                                            EGLContext share_context,
@@ -1562,7 +1409,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLImageKHR DebugEGLApi::eglCreateImageKHRFn(EGLDisplay dpy,
                                              EGLContext ctx,
                                              EGLenum target,
@@ -1578,7 +1424,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLSurface DebugEGLApi::eglCreatePbufferFromClientBufferFn(
     EGLDisplay dpy,
     EGLenum buftype,
@@ -1595,7 +1440,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLSurface DebugEGLApi::eglCreatePbufferSurfaceFn(EGLDisplay dpy,
                                                   EGLConfig config,
                                                   const EGLint* attrib_list) {
@@ -1608,7 +1452,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLSurface DebugEGLApi::eglCreatePixmapSurfaceFn(EGLDisplay dpy,
                                                  EGLConfig config,
                                                  EGLNativePixmapType pixmap,
@@ -1622,7 +1465,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLStreamKHR DebugEGLApi::eglCreateStreamKHRFn(EGLDisplay dpy,
                                                const EGLint* attrib_list) {
   GL_SERVICE_LOG("eglCreateStreamKHR"
@@ -1633,7 +1475,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglCreateStreamProducerD3DTextureANGLEFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -1647,7 +1488,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLSyncKHR DebugEGLApi::eglCreateSyncKHRFn(EGLDisplay dpy,
                                            EGLenum type,
                                            const EGLint* attrib_list) {
@@ -1659,7 +1499,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLSurface DebugEGLApi::eglCreateWindowSurfaceFn(EGLDisplay dpy,
                                                  EGLConfig config,
                                                  EGLNativeWindowType win,
@@ -1673,7 +1512,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglDestroyContextFn(EGLDisplay dpy, EGLContext ctx) {
   GL_SERVICE_LOG("eglDestroyContext"
                  << "(" << dpy << ", " << ctx << ")");
@@ -1682,7 +1520,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglDestroyImageKHRFn(EGLDisplay dpy,
                                              EGLImageKHR image) {
   GL_SERVICE_LOG("eglDestroyImageKHR"
@@ -1692,7 +1529,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglDestroyStreamKHRFn(EGLDisplay dpy,
                                               EGLStreamKHR stream) {
   GL_SERVICE_LOG("eglDestroyStreamKHR"
@@ -1702,7 +1538,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglDestroySurfaceFn(EGLDisplay dpy,
                                             EGLSurface surface) {
   GL_SERVICE_LOG("eglDestroySurface"
@@ -1712,7 +1547,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglDestroySyncKHRFn(EGLDisplay dpy, EGLSyncKHR sync) {
   GL_SERVICE_LOG("eglDestroySyncKHR"
                  << "(" << dpy << ", " << sync << ")");
@@ -1721,7 +1555,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLint DebugEGLApi::eglDupNativeFenceFDANDROIDFn(EGLDisplay dpy,
                                                  EGLSyncKHR sync) {
   GL_SERVICE_LOG("eglDupNativeFenceFDANDROID"
@@ -1731,7 +1564,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglExportDMABUFImageMESAFn(EGLDisplay dpy,
                                                    EGLImageKHR image,
                                                    int* fds,
@@ -1748,7 +1580,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglExportDMABUFImageQueryMESAFn(
     EGLDisplay dpy,
     EGLImageKHR image,
@@ -1766,7 +1597,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetCompositorTimingANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -1783,7 +1613,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetCompositorTimingSupportedANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -1796,7 +1625,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetConfigAttribFn(EGLDisplay dpy,
                                              EGLConfig config,
                                              EGLint attribute,
@@ -1810,7 +1638,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetConfigsFn(EGLDisplay dpy,
                                         EGLConfig* configs,
                                         EGLint config_size,
@@ -1825,7 +1652,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLContext DebugEGLApi::eglGetCurrentContextFn(void) {
   GL_SERVICE_LOG("eglGetCurrentContext"
                  << "("
@@ -1835,7 +1661,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay DebugEGLApi::eglGetCurrentDisplayFn(void) {
   GL_SERVICE_LOG("eglGetCurrentDisplay"
                  << "("
@@ -1845,7 +1670,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLSurface DebugEGLApi::eglGetCurrentSurfaceFn(EGLint readdraw) {
   GL_SERVICE_LOG("eglGetCurrentSurface"
                  << "(" << readdraw << ")");
@@ -1854,7 +1678,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay DebugEGLApi::eglGetDisplayFn(EGLNativeDisplayType display_id) {
   GL_SERVICE_LOG("eglGetDisplay"
                  << "(" << display_id << ")");
@@ -1863,7 +1686,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLint DebugEGLApi::eglGetErrorFn(void) {
   GL_SERVICE_LOG("eglGetError"
                  << "("
@@ -1873,7 +1695,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetFrameTimestampsANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -1892,7 +1713,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetFrameTimestampSupportedANDROIDFn(
     EGLDisplay dpy,
     EGLSurface surface,
@@ -1905,7 +1725,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLClientBuffer DebugEGLApi::eglGetNativeClientBufferANDROIDFn(
     const struct AHardwareBuffer* ahardwarebuffer) {
   GL_SERVICE_LOG("eglGetNativeClientBufferANDROID"
@@ -1916,7 +1735,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetNextFrameIdANDROIDFn(EGLDisplay dpy,
                                                    EGLSurface surface,
                                                    EGLuint64KHR* frameId) {
@@ -1929,7 +1747,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLDisplay DebugEGLApi::eglGetPlatformDisplayEXTFn(EGLenum platform,
                                                    void* native_display,
                                                    const EGLint* attrib_list) {
@@ -1943,7 +1760,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 __eglMustCastToProperFunctionPointerType DebugEGLApi::eglGetProcAddressFn(
     const char* procname) {
   GL_SERVICE_LOG("eglGetProcAddress"
@@ -1954,7 +1770,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetSyncAttribKHRFn(EGLDisplay dpy,
                                               EGLSyncKHR sync,
                                               EGLint attribute,
@@ -1968,7 +1783,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglGetSyncValuesCHROMIUMFn(EGLDisplay dpy,
                                                    EGLSurface surface,
                                                    EGLuint64CHROMIUM* ust,
@@ -1985,7 +1799,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglImageFlushExternalEXTFn(
     EGLDisplay dpy,
     EGLImageKHR image,
@@ -1999,7 +1812,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglInitializeFn(EGLDisplay dpy,
                                         EGLint* major,
                                         EGLint* minor) {
@@ -2011,7 +1823,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglMakeCurrentFn(EGLDisplay dpy,
                                          EGLSurface draw,
                                          EGLSurface read,
@@ -2024,7 +1835,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglPostSubBufferNVFn(EGLDisplay dpy,
                                              EGLSurface surface,
                                              EGLint x,
@@ -2040,7 +1850,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLint DebugEGLApi::eglProgramCacheGetAttribANGLEFn(EGLDisplay dpy,
                                                     EGLenum attrib) {
   GL_SERVICE_LOG("eglProgramCacheGetAttribANGLE"
@@ -2050,7 +1859,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugEGLApi::eglProgramCachePopulateANGLEFn(EGLDisplay dpy,
                                                  const void* key,
                                                  EGLint keysize,
@@ -2064,7 +1872,6 @@
                                            binarysize);
 }
 
-DISABLE_CFI_ICALL
 void DebugEGLApi::eglProgramCacheQueryANGLEFn(EGLDisplay dpy,
                                               EGLint index,
                                               void* key,
@@ -2081,7 +1888,6 @@
                                         binarysize);
 }
 
-DISABLE_CFI_ICALL
 EGLint DebugEGLApi::eglProgramCacheResizeANGLEFn(EGLDisplay dpy,
                                                  EGLint limit,
                                                  EGLenum mode) {
@@ -2092,7 +1898,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLenum DebugEGLApi::eglQueryAPIFn(void) {
   GL_SERVICE_LOG("eglQueryAPI"
                  << "("
@@ -2102,7 +1907,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglQueryContextFn(EGLDisplay dpy,
                                           EGLContext ctx,
                                           EGLint attribute,
@@ -2115,7 +1919,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglQueryStreamKHRFn(EGLDisplay dpy,
                                             EGLStreamKHR stream,
                                             EGLenum attribute,
@@ -2129,7 +1932,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglQueryStreamu64KHRFn(EGLDisplay dpy,
                                                EGLStreamKHR stream,
                                                EGLenum attribute,
@@ -2143,7 +1945,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 const char* DebugEGLApi::eglQueryStringFn(EGLDisplay dpy, EGLint name) {
   GL_SERVICE_LOG("eglQueryString"
                  << "(" << dpy << ", " << name << ")");
@@ -2152,7 +1953,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglQuerySurfaceFn(EGLDisplay dpy,
                                           EGLSurface surface,
                                           EGLint attribute,
@@ -2166,7 +1966,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglQuerySurfacePointerANGLEFn(EGLDisplay dpy,
                                                       EGLSurface surface,
                                                       EGLint attribute,
@@ -2180,7 +1979,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglReleaseTexImageFn(EGLDisplay dpy,
                                              EGLSurface surface,
                                              EGLint buffer) {
@@ -2191,7 +1989,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglReleaseThreadFn(void) {
   GL_SERVICE_LOG("eglReleaseThread"
                  << "("
@@ -2201,7 +1998,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglStreamAttribKHRFn(EGLDisplay dpy,
                                              EGLStreamKHR stream,
                                              EGLenum attribute,
@@ -2215,7 +2011,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglStreamConsumerAcquireKHRFn(EGLDisplay dpy,
                                                       EGLStreamKHR stream) {
   GL_SERVICE_LOG("eglStreamConsumerAcquireKHR"
@@ -2225,7 +2020,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglStreamConsumerGLTextureExternalAttribsNVFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -2239,7 +2033,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglStreamConsumerGLTextureExternalKHRFn(
     EGLDisplay dpy,
     EGLStreamKHR stream) {
@@ -2251,7 +2044,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglStreamConsumerReleaseKHRFn(EGLDisplay dpy,
                                                       EGLStreamKHR stream) {
   GL_SERVICE_LOG("eglStreamConsumerReleaseKHR"
@@ -2261,7 +2053,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglStreamPostD3DTextureANGLEFn(
     EGLDisplay dpy,
     EGLStreamKHR stream,
@@ -2277,7 +2068,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglSurfaceAttribFn(EGLDisplay dpy,
                                            EGLSurface surface,
                                            EGLint attribute,
@@ -2291,7 +2081,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglSwapBuffersFn(EGLDisplay dpy, EGLSurface surface) {
   GL_SERVICE_LOG("eglSwapBuffers"
                  << "(" << dpy << ", " << surface << ")");
@@ -2300,7 +2089,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglSwapBuffersWithDamageKHRFn(EGLDisplay dpy,
                                                       EGLSurface surface,
                                                       EGLint* rects,
@@ -2314,7 +2102,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglSwapIntervalFn(EGLDisplay dpy, EGLint interval) {
   GL_SERVICE_LOG("eglSwapInterval"
                  << "(" << dpy << ", " << interval << ")");
@@ -2323,7 +2110,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglTerminateFn(EGLDisplay dpy) {
   GL_SERVICE_LOG("eglTerminate"
                  << "(" << dpy << ")");
@@ -2332,7 +2118,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglWaitClientFn(void) {
   GL_SERVICE_LOG("eglWaitClient"
                  << "("
@@ -2342,7 +2127,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglWaitGLFn(void) {
   GL_SERVICE_LOG("eglWaitGL"
                  << "("
@@ -2352,7 +2136,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLBoolean DebugEGLApi::eglWaitNativeFn(EGLint engine) {
   GL_SERVICE_LOG("eglWaitNative"
                  << "(" << engine << ")");
@@ -2361,7 +2144,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 EGLint DebugEGLApi::eglWaitSyncKHRFn(EGLDisplay dpy,
                                      EGLSyncKHR sync,
                                      EGLint flags) {
diff --git a/ui/gl/gl_bindings_autogen_gl.cc b/ui/gl/gl_bindings_autogen_gl.cc
index 40bc9c65..5897a33 100644
--- a/ui/gl/gl_bindings_autogen_gl.cc
+++ b/ui/gl/gl_bindings_autogen_gl.cc
@@ -10,8 +10,6 @@
 
 #include <string>
 
-#include "base/compiler_specific.h"
-#include "base/memory/protected_memory.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
@@ -2253,49 +2251,40 @@
   memset(this, 0, sizeof(*this));
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glActiveTextureFn(GLenum texture) {
   driver_->fn.glActiveTextureFn(texture);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glApplyFramebufferAttachmentCMAAINTELFn(void) {
   driver_->fn.glApplyFramebufferAttachmentCMAAINTELFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glAttachShaderFn(GLuint program, GLuint shader) {
   driver_->fn.glAttachShaderFn(program, shader);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBeginQueryFn(GLenum target, GLuint id) {
   driver_->fn.glBeginQueryFn(target, id);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBeginTransformFeedbackFn(GLenum primitiveMode) {
   driver_->fn.glBeginTransformFeedbackFn(primitiveMode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindAttribLocationFn(GLuint program,
                                        GLuint index,
                                        const char* name) {
   driver_->fn.glBindAttribLocationFn(program, index, name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindBufferFn(GLenum target, GLuint buffer) {
   driver_->fn.glBindBufferFn(target, buffer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindBufferBaseFn(GLenum target, GLuint index, GLuint buffer) {
   driver_->fn.glBindBufferBaseFn(target, index, buffer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindBufferRangeFn(GLenum target,
                                     GLuint index,
                                     GLuint buffer,
@@ -2304,14 +2293,12 @@
   driver_->fn.glBindBufferRangeFn(target, index, buffer, offset, size);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindFragDataLocationFn(GLuint program,
                                          GLuint colorNumber,
                                          const char* name) {
   driver_->fn.glBindFragDataLocationFn(program, colorNumber, name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindFragDataLocationIndexedFn(GLuint program,
                                                 GLuint colorNumber,
                                                 GLuint index,
@@ -2320,12 +2307,10 @@
                                               name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindFramebufferEXTFn(GLenum target, GLuint framebuffer) {
   driver_->fn.glBindFramebufferEXTFn(target, framebuffer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindImageTextureEXTFn(GLuint index,
                                         GLuint texture,
                                         GLint level,
@@ -2337,44 +2322,36 @@
                                       access, format);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindRenderbufferEXTFn(GLenum target, GLuint renderbuffer) {
   driver_->fn.glBindRenderbufferEXTFn(target, renderbuffer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindSamplerFn(GLuint unit, GLuint sampler) {
   driver_->fn.glBindSamplerFn(unit, sampler);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindTextureFn(GLenum target, GLuint texture) {
   driver_->fn.glBindTextureFn(target, texture);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindTransformFeedbackFn(GLenum target, GLuint id) {
   driver_->fn.glBindTransformFeedbackFn(target, id);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindUniformLocationCHROMIUMFn(GLuint program,
                                                 GLint location,
                                                 const char* name) {
   driver_->fn.glBindUniformLocationCHROMIUMFn(program, location, name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBindVertexArrayOESFn(GLuint array) {
   driver_->fn.glBindVertexArrayOESFn(array);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBlendBarrierKHRFn(void) {
   driver_->fn.glBlendBarrierKHRFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBlendColorFn(GLclampf red,
                                GLclampf green,
                                GLclampf blue,
@@ -2382,22 +2359,18 @@
   driver_->fn.glBlendColorFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBlendEquationFn(GLenum mode) {
   driver_->fn.glBlendEquationFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBlendEquationSeparateFn(GLenum modeRGB, GLenum modeAlpha) {
   driver_->fn.glBlendEquationSeparateFn(modeRGB, modeAlpha);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBlendFuncFn(GLenum sfactor, GLenum dfactor) {
   driver_->fn.glBlendFuncFn(sfactor, dfactor);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBlendFuncSeparateFn(GLenum srcRGB,
                                       GLenum dstRGB,
                                       GLenum srcAlpha,
@@ -2405,7 +2378,6 @@
   driver_->fn.glBlendFuncSeparateFn(srcRGB, dstRGB, srcAlpha, dstAlpha);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBlitFramebufferFn(GLint srcX0,
                                     GLint srcY0,
                                     GLint srcX1,
@@ -2420,7 +2392,6 @@
                                   dstX1, dstY1, mask, filter);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBufferDataFn(GLenum target,
                                GLsizeiptr size,
                                const void* data,
@@ -2428,7 +2399,6 @@
   driver_->fn.glBufferDataFn(target, size, data, usage);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glBufferSubDataFn(GLenum target,
                                   GLintptr offset,
                                   GLsizeiptr size,
@@ -2436,17 +2406,14 @@
   driver_->fn.glBufferSubDataFn(target, offset, size, data);
 }
 
-DISABLE_CFI_ICALL
 GLenum GLApiBase::glCheckFramebufferStatusEXTFn(GLenum target) {
   return driver_->fn.glCheckFramebufferStatusEXTFn(target);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearFn(GLbitfield mask) {
   driver_->fn.glClearFn(mask);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearBufferfiFn(GLenum buffer,
                                   GLint drawbuffer,
                                   const GLfloat depth,
@@ -2454,28 +2421,24 @@
   driver_->fn.glClearBufferfiFn(buffer, drawbuffer, depth, stencil);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearBufferfvFn(GLenum buffer,
                                   GLint drawbuffer,
                                   const GLfloat* value) {
   driver_->fn.glClearBufferfvFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearBufferivFn(GLenum buffer,
                                   GLint drawbuffer,
                                   const GLint* value) {
   driver_->fn.glClearBufferivFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearBufferuivFn(GLenum buffer,
                                    GLint drawbuffer,
                                    const GLuint* value) {
   driver_->fn.glClearBufferuivFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearColorFn(GLclampf red,
                                GLclampf green,
                                GLclampf blue,
@@ -2483,29 +2446,24 @@
   driver_->fn.glClearColorFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearDepthFn(GLclampd depth) {
   driver_->fn.glClearDepthFn(depth);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearDepthfFn(GLclampf depth) {
   driver_->fn.glClearDepthfFn(depth);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glClearStencilFn(GLint s) {
   driver_->fn.glClearStencilFn(s);
 }
 
-DISABLE_CFI_ICALL
 GLenum GLApiBase::glClientWaitSyncFn(GLsync sync,
                                      GLbitfield flags,
                                      GLuint64 timeout) {
   return driver_->fn.glClientWaitSyncFn(sync, flags, timeout);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glColorMaskFn(GLboolean red,
                               GLboolean green,
                               GLboolean blue,
@@ -2513,18 +2471,15 @@
   driver_->fn.glColorMaskFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompileShaderFn(GLuint shader) {
   driver_->fn.glCompileShaderFn(shader);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedCopyTextureCHROMIUMFn(GLuint sourceId,
                                                   GLuint destId) {
   driver_->fn.glCompressedCopyTextureCHROMIUMFn(sourceId, destId);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedTexImage2DFn(GLenum target,
                                          GLint level,
                                          GLenum internalformat,
@@ -2537,7 +2492,6 @@
                                        height, border, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedTexImage2DRobustANGLEFn(GLenum target,
                                                     GLint level,
                                                     GLenum internalformat,
@@ -2552,7 +2506,6 @@
                                                   imageSize, dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedTexImage3DFn(GLenum target,
                                          GLint level,
                                          GLenum internalformat,
@@ -2566,7 +2519,6 @@
                                        height, depth, border, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedTexImage3DRobustANGLEFn(GLenum target,
                                                     GLint level,
                                                     GLenum internalformat,
@@ -2582,7 +2534,6 @@
                                                   imageSize, dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedTexSubImage2DFn(GLenum target,
                                             GLint level,
                                             GLint xoffset,
@@ -2596,7 +2547,6 @@
       target, level, xoffset, yoffset, width, height, format, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedTexSubImage2DRobustANGLEFn(GLenum target,
                                                        GLint level,
                                                        GLint xoffset,
@@ -2612,7 +2562,6 @@
       dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedTexSubImage3DFn(GLenum target,
                                             GLint level,
                                             GLint xoffset,
@@ -2629,7 +2578,6 @@
                                           imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCompressedTexSubImage3DRobustANGLEFn(GLenum target,
                                                        GLint level,
                                                        GLint xoffset,
@@ -2647,7 +2595,6 @@
       imageSize, dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCopyBufferSubDataFn(GLenum readTarget,
                                       GLenum writeTarget,
                                       GLintptr readOffset,
@@ -2657,7 +2604,6 @@
                                     writeOffset, size);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCopySubTextureCHROMIUMFn(GLuint sourceId,
                                            GLint sourceLevel,
                                            GLenum destTarget,
@@ -2678,7 +2624,6 @@
       unpackUnmultiplyAlpha);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCopyTexImage2DFn(GLenum target,
                                    GLint level,
                                    GLenum internalformat,
@@ -2691,7 +2636,6 @@
                                  height, border);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCopyTexSubImage2DFn(GLenum target,
                                       GLint level,
                                       GLint xoffset,
@@ -2704,7 +2648,6 @@
                                     width, height);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCopyTexSubImage3DFn(GLenum target,
                                       GLint level,
                                       GLint xoffset,
@@ -2718,7 +2661,6 @@
                                     y, width, height);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCopyTextureCHROMIUMFn(GLuint sourceId,
                                         GLint sourceLevel,
                                         GLenum destTarget,
@@ -2734,12 +2676,10 @@
       destType, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCoverageModulationNVFn(GLenum components) {
   driver_->fn.glCoverageModulationNVFn(components);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCoverFillPathInstancedNVFn(GLsizei numPaths,
                                              GLenum pathNameType,
                                              const void* paths,
@@ -2752,12 +2692,10 @@
                                            transformValues);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCoverFillPathNVFn(GLuint path, GLenum coverMode) {
   driver_->fn.glCoverFillPathNVFn(path, coverMode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCoverStrokePathInstancedNVFn(GLsizei numPaths,
                                                GLenum pathNameType,
                                                const void* paths,
@@ -2770,33 +2708,27 @@
                                              transformValues);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCoverStrokePathNVFn(GLuint name, GLenum coverMode) {
   driver_->fn.glCoverStrokePathNVFn(name, coverMode);
 }
 
-DISABLE_CFI_ICALL
 GLuint GLApiBase::glCreateProgramFn(void) {
   return driver_->fn.glCreateProgramFn();
 }
 
-DISABLE_CFI_ICALL
 GLuint GLApiBase::glCreateShaderFn(GLenum type) {
   return driver_->fn.glCreateShaderFn(type);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glCullFaceFn(GLenum mode) {
   driver_->fn.glCullFaceFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDebugMessageCallbackFn(GLDEBUGPROC callback,
                                          const void* userParam) {
   driver_->fn.glDebugMessageCallbackFn(callback, userParam);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDebugMessageControlFn(GLenum source,
                                         GLenum type,
                                         GLenum severity,
@@ -2807,7 +2739,6 @@
                                       enabled);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDebugMessageInsertFn(GLenum source,
                                        GLenum type,
                                        GLuint id,
@@ -2817,126 +2748,102 @@
   driver_->fn.glDebugMessageInsertFn(source, type, id, severity, length, buf);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteBuffersARBFn(GLsizei n, const GLuint* buffers) {
   driver_->fn.glDeleteBuffersARBFn(n, buffers);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteFencesAPPLEFn(GLsizei n, const GLuint* fences) {
   driver_->fn.glDeleteFencesAPPLEFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteFencesNVFn(GLsizei n, const GLuint* fences) {
   driver_->fn.glDeleteFencesNVFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteFramebuffersEXTFn(GLsizei n,
                                           const GLuint* framebuffers) {
   driver_->fn.glDeleteFramebuffersEXTFn(n, framebuffers);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeletePathsNVFn(GLuint path, GLsizei range) {
   driver_->fn.glDeletePathsNVFn(path, range);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteProgramFn(GLuint program) {
   driver_->fn.glDeleteProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteQueriesFn(GLsizei n, const GLuint* ids) {
   driver_->fn.glDeleteQueriesFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteRenderbuffersEXTFn(GLsizei n,
                                            const GLuint* renderbuffers) {
   driver_->fn.glDeleteRenderbuffersEXTFn(n, renderbuffers);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteSamplersFn(GLsizei n, const GLuint* samplers) {
   driver_->fn.glDeleteSamplersFn(n, samplers);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteShaderFn(GLuint shader) {
   driver_->fn.glDeleteShaderFn(shader);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteSyncFn(GLsync sync) {
   driver_->fn.glDeleteSyncFn(sync);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteTexturesFn(GLsizei n, const GLuint* textures) {
   driver_->fn.glDeleteTexturesFn(n, textures);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteTransformFeedbacksFn(GLsizei n, const GLuint* ids) {
   driver_->fn.glDeleteTransformFeedbacksFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDeleteVertexArraysOESFn(GLsizei n, const GLuint* arrays) {
   driver_->fn.glDeleteVertexArraysOESFn(n, arrays);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDepthFuncFn(GLenum func) {
   driver_->fn.glDepthFuncFn(func);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDepthMaskFn(GLboolean flag) {
   driver_->fn.glDepthMaskFn(flag);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDepthRangeFn(GLclampd zNear, GLclampd zFar) {
   driver_->fn.glDepthRangeFn(zNear, zFar);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDepthRangefFn(GLclampf zNear, GLclampf zFar) {
   driver_->fn.glDepthRangefFn(zNear, zFar);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDetachShaderFn(GLuint program, GLuint shader) {
   driver_->fn.glDetachShaderFn(program, shader);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDisableFn(GLenum cap) {
   driver_->fn.glDisableFn(cap);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDisableVertexAttribArrayFn(GLuint index) {
   driver_->fn.glDisableVertexAttribArrayFn(index);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDiscardFramebufferEXTFn(GLenum target,
                                           GLsizei numAttachments,
                                           const GLenum* attachments) {
   driver_->fn.glDiscardFramebufferEXTFn(target, numAttachments, attachments);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDrawArraysFn(GLenum mode, GLint first, GLsizei count) {
   driver_->fn.glDrawArraysFn(mode, first, count);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDrawArraysInstancedANGLEFn(GLenum mode,
                                              GLint first,
                                              GLsizei count,
@@ -2944,17 +2851,14 @@
   driver_->fn.glDrawArraysInstancedANGLEFn(mode, first, count, primcount);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDrawBufferFn(GLenum mode) {
   driver_->fn.glDrawBufferFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDrawBuffersARBFn(GLsizei n, const GLenum* bufs) {
   driver_->fn.glDrawBuffersARBFn(n, bufs);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDrawElementsFn(GLenum mode,
                                  GLsizei count,
                                  GLenum type,
@@ -2962,7 +2866,6 @@
   driver_->fn.glDrawElementsFn(mode, count, type, indices);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDrawElementsInstancedANGLEFn(GLenum mode,
                                                GLsizei count,
                                                GLenum type,
@@ -2972,7 +2875,6 @@
                                              primcount);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glDrawRangeElementsFn(GLenum mode,
                                       GLuint start,
                                       GLuint end,
@@ -2982,71 +2884,58 @@
   driver_->fn.glDrawRangeElementsFn(mode, start, end, count, type, indices);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glEGLImageTargetRenderbufferStorageOESFn(GLenum target,
                                                          GLeglImageOES image) {
   driver_->fn.glEGLImageTargetRenderbufferStorageOESFn(target, image);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glEGLImageTargetTexture2DOESFn(GLenum target,
                                                GLeglImageOES image) {
   driver_->fn.glEGLImageTargetTexture2DOESFn(target, image);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glEnableFn(GLenum cap) {
   driver_->fn.glEnableFn(cap);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glEnableVertexAttribArrayFn(GLuint index) {
   driver_->fn.glEnableVertexAttribArrayFn(index);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glEndQueryFn(GLenum target) {
   driver_->fn.glEndQueryFn(target);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glEndTransformFeedbackFn(void) {
   driver_->fn.glEndTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 GLsync GLApiBase::glFenceSyncFn(GLenum condition, GLbitfield flags) {
   return driver_->fn.glFenceSyncFn(condition, flags);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFinishFn(void) {
   driver_->fn.glFinishFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFinishFenceAPPLEFn(GLuint fence) {
   driver_->fn.glFinishFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFinishFenceNVFn(GLuint fence) {
   driver_->fn.glFinishFenceNVFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFlushFn(void) {
   driver_->fn.glFlushFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFlushMappedBufferRangeFn(GLenum target,
                                            GLintptr offset,
                                            GLsizeiptr length) {
   driver_->fn.glFlushMappedBufferRangeFn(target, offset, length);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFramebufferRenderbufferEXTFn(GLenum target,
                                                GLenum attachment,
                                                GLenum renderbuffertarget,
@@ -3055,7 +2944,6 @@
                                              renderbuffertarget, renderbuffer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFramebufferTexture2DEXTFn(GLenum target,
                                             GLenum attachment,
                                             GLenum textarget,
@@ -3065,7 +2953,6 @@
                                           texture, level);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFramebufferTexture2DMultisampleEXTFn(GLenum target,
                                                        GLenum attachment,
                                                        GLenum textarget,
@@ -3076,7 +2963,6 @@
       target, attachment, textarget, texture, level, samples);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFramebufferTextureLayerFn(GLenum target,
                                             GLenum attachment,
                                             GLuint texture,
@@ -3086,72 +2972,58 @@
                                           layer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glFrontFaceFn(GLenum mode) {
   driver_->fn.glFrontFaceFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenBuffersARBFn(GLsizei n, GLuint* buffers) {
   driver_->fn.glGenBuffersARBFn(n, buffers);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenerateMipmapEXTFn(GLenum target) {
   driver_->fn.glGenerateMipmapEXTFn(target);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenFencesAPPLEFn(GLsizei n, GLuint* fences) {
   driver_->fn.glGenFencesAPPLEFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenFencesNVFn(GLsizei n, GLuint* fences) {
   driver_->fn.glGenFencesNVFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenFramebuffersEXTFn(GLsizei n, GLuint* framebuffers) {
   driver_->fn.glGenFramebuffersEXTFn(n, framebuffers);
 }
 
-DISABLE_CFI_ICALL
 GLuint GLApiBase::glGenPathsNVFn(GLsizei range) {
   return driver_->fn.glGenPathsNVFn(range);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenQueriesFn(GLsizei n, GLuint* ids) {
   driver_->fn.glGenQueriesFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenRenderbuffersEXTFn(GLsizei n, GLuint* renderbuffers) {
   driver_->fn.glGenRenderbuffersEXTFn(n, renderbuffers);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenSamplersFn(GLsizei n, GLuint* samplers) {
   driver_->fn.glGenSamplersFn(n, samplers);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenTexturesFn(GLsizei n, GLuint* textures) {
   driver_->fn.glGenTexturesFn(n, textures);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenTransformFeedbacksFn(GLsizei n, GLuint* ids) {
   driver_->fn.glGenTransformFeedbacksFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGenVertexArraysOESFn(GLsizei n, GLuint* arrays) {
   driver_->fn.glGenVertexArraysOESFn(n, arrays);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetActiveAttribFn(GLuint program,
                                     GLuint index,
                                     GLsizei bufsize,
@@ -3163,7 +3035,6 @@
                                   name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetActiveUniformFn(GLuint program,
                                      GLuint index,
                                      GLsizei bufsize,
@@ -3175,7 +3046,6 @@
                                    name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetActiveUniformBlockivFn(GLuint program,
                                             GLuint uniformBlockIndex,
                                             GLenum pname,
@@ -3184,7 +3054,6 @@
                                           params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetActiveUniformBlockivRobustANGLEFn(GLuint program,
                                                        GLuint uniformBlockIndex,
                                                        GLenum pname,
@@ -3195,7 +3064,6 @@
       program, uniformBlockIndex, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetActiveUniformBlockNameFn(GLuint program,
                                               GLuint uniformBlockIndex,
                                               GLsizei bufSize,
@@ -3205,7 +3073,6 @@
                                             length, uniformBlockName);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetActiveUniformsivFn(GLuint program,
                                         GLsizei uniformCount,
                                         const GLuint* uniformIndices,
@@ -3215,7 +3082,6 @@
                                       pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetAttachedShadersFn(GLuint program,
                                        GLsizei maxcount,
                                        GLsizei* count,
@@ -3223,12 +3089,10 @@
   driver_->fn.glGetAttachedShadersFn(program, maxcount, count, shaders);
 }
 
-DISABLE_CFI_ICALL
 GLint GLApiBase::glGetAttribLocationFn(GLuint program, const char* name) {
   return driver_->fn.glGetAttribLocationFn(program, name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetBooleani_vRobustANGLEFn(GLenum target,
                                              GLuint index,
                                              GLsizei bufSize,
@@ -3238,12 +3102,10 @@
                                            data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetBooleanvFn(GLenum pname, GLboolean* params) {
   driver_->fn.glGetBooleanvFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetBooleanvRobustANGLEFn(GLenum pname,
                                            GLsizei bufSize,
                                            GLsizei* length,
@@ -3251,7 +3113,6 @@
   driver_->fn.glGetBooleanvRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetBufferParameteri64vRobustANGLEFn(GLenum target,
                                                       GLenum pname,
                                                       GLsizei bufSize,
@@ -3261,14 +3122,12 @@
                                                     length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetBufferParameterivFn(GLenum target,
                                          GLenum pname,
                                          GLint* params) {
   driver_->fn.glGetBufferParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetBufferParameterivRobustANGLEFn(GLenum target,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -3278,7 +3137,6 @@
                                                   length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetBufferPointervRobustANGLEFn(GLenum target,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -3288,7 +3146,6 @@
                                                params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetDebugMessageLogFn(GLuint count,
                                        GLsizei bufSize,
                                        GLenum* sources,
@@ -3301,22 +3158,18 @@
                                      severities, lengths, messageLog);
 }
 
-DISABLE_CFI_ICALL
 GLenum GLApiBase::glGetErrorFn(void) {
   return driver_->fn.glGetErrorFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetFenceivNVFn(GLuint fence, GLenum pname, GLint* params) {
   driver_->fn.glGetFenceivNVFn(fence, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetFloatvFn(GLenum pname, GLfloat* params) {
   driver_->fn.glGetFloatvFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetFloatvRobustANGLEFn(GLenum pname,
                                          GLsizei bufSize,
                                          GLsizei* length,
@@ -3324,17 +3177,14 @@
   driver_->fn.glGetFloatvRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 GLint GLApiBase::glGetFragDataIndexFn(GLuint program, const char* name) {
   return driver_->fn.glGetFragDataIndexFn(program, name);
 }
 
-DISABLE_CFI_ICALL
 GLint GLApiBase::glGetFragDataLocationFn(GLuint program, const char* name) {
   return driver_->fn.glGetFragDataLocationFn(program, name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetFramebufferAttachmentParameterivEXTFn(GLenum target,
                                                            GLenum attachment,
                                                            GLenum pname,
@@ -3343,7 +3193,6 @@
                                                          pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetFramebufferAttachmentParameterivRobustANGLEFn(
     GLenum target,
     GLenum attachment,
@@ -3355,7 +3204,6 @@
       target, attachment, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetFramebufferParameterivRobustANGLEFn(GLenum target,
                                                          GLenum pname,
                                                          GLsizei bufSize,
@@ -3365,19 +3213,16 @@
                                                        length, params);
 }
 
-DISABLE_CFI_ICALL
 GLenum GLApiBase::glGetGraphicsResetStatusARBFn(void) {
   return driver_->fn.glGetGraphicsResetStatusARBFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetInteger64i_vFn(GLenum target,
                                     GLuint index,
                                     GLint64* data) {
   driver_->fn.glGetInteger64i_vFn(target, index, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetInteger64i_vRobustANGLEFn(GLenum target,
                                                GLuint index,
                                                GLsizei bufSize,
@@ -3387,12 +3232,10 @@
                                              data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetInteger64vFn(GLenum pname, GLint64* params) {
   driver_->fn.glGetInteger64vFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetInteger64vRobustANGLEFn(GLenum pname,
                                              GLsizei bufSize,
                                              GLsizei* length,
@@ -3400,12 +3243,10 @@
   driver_->fn.glGetInteger64vRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetIntegeri_vFn(GLenum target, GLuint index, GLint* data) {
   driver_->fn.glGetIntegeri_vFn(target, index, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetIntegeri_vRobustANGLEFn(GLenum target,
                                              GLuint index,
                                              GLsizei bufSize,
@@ -3415,12 +3256,10 @@
                                            data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetIntegervFn(GLenum pname, GLint* params) {
   driver_->fn.glGetIntegervFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetIntegervRobustANGLEFn(GLenum pname,
                                            GLsizei bufSize,
                                            GLsizei* length,
@@ -3428,7 +3267,6 @@
   driver_->fn.glGetIntegervRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetInternalformativFn(GLenum target,
                                         GLenum internalformat,
                                         GLenum pname,
@@ -3438,7 +3276,6 @@
                                       params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetInternalformativRobustANGLEFn(GLenum target,
                                                    GLenum internalformat,
                                                    GLenum pname,
@@ -3449,12 +3286,10 @@
                                                  bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetMultisamplefvFn(GLenum pname, GLuint index, GLfloat* val) {
   driver_->fn.glGetMultisamplefvFn(pname, index, val);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetMultisamplefvRobustANGLEFn(GLenum pname,
                                                 GLuint index,
                                                 GLsizei bufSize,
@@ -3464,7 +3299,6 @@
                                               val);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetnUniformfvRobustANGLEFn(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
@@ -3474,7 +3308,6 @@
                                            params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetnUniformivRobustANGLEFn(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
@@ -3484,7 +3317,6 @@
                                            params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetnUniformuivRobustANGLEFn(GLuint program,
                                               GLint location,
                                               GLsizei bufSize,
@@ -3494,7 +3326,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetObjectLabelFn(GLenum identifier,
                                    GLuint name,
                                    GLsizei bufSize,
@@ -3503,7 +3334,6 @@
   driver_->fn.glGetObjectLabelFn(identifier, name, bufSize, length, label);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetObjectPtrLabelFn(void* ptr,
                                       GLsizei bufSize,
                                       GLsizei* length,
@@ -3511,12 +3341,10 @@
   driver_->fn.glGetObjectPtrLabelFn(ptr, bufSize, length, label);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetPointervFn(GLenum pname, void** params) {
   driver_->fn.glGetPointervFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetPointervRobustANGLERobustANGLEFn(GLenum pname,
                                                       GLsizei bufSize,
                                                       GLsizei* length,
@@ -3525,7 +3353,6 @@
                                                     params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetProgramBinaryFn(GLuint program,
                                      GLsizei bufSize,
                                      GLsizei* length,
@@ -3535,7 +3362,6 @@
                                    binary);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetProgramInfoLogFn(GLuint program,
                                       GLsizei bufsize,
                                       GLsizei* length,
@@ -3543,7 +3369,6 @@
   driver_->fn.glGetProgramInfoLogFn(program, bufsize, length, infolog);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetProgramInterfaceivFn(GLuint program,
                                           GLenum programInterface,
                                           GLenum pname,
@@ -3552,7 +3377,6 @@
                                         params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetProgramInterfaceivRobustANGLEFn(GLuint program,
                                                      GLenum programInterface,
                                                      GLenum pname,
@@ -3563,12 +3387,10 @@
       program, programInterface, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetProgramivFn(GLuint program, GLenum pname, GLint* params) {
   driver_->fn.glGetProgramivFn(program, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetProgramivRobustANGLEFn(GLuint program,
                                             GLenum pname,
                                             GLsizei bufSize,
@@ -3578,7 +3400,6 @@
                                           params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetProgramResourceivFn(GLuint program,
                                          GLenum programInterface,
                                          GLuint index,
@@ -3592,7 +3413,6 @@
                                        params);
 }
 
-DISABLE_CFI_ICALL
 GLint GLApiBase::glGetProgramResourceLocationFn(GLuint program,
                                                 GLenum programInterface,
                                                 const char* name) {
@@ -3600,7 +3420,6 @@
                                                     name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetProgramResourceNameFn(GLuint program,
                                            GLenum programInterface,
                                            GLuint index,
@@ -3611,12 +3430,10 @@
                                          bufSize, length, name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryivFn(GLenum target, GLenum pname, GLint* params) {
   driver_->fn.glGetQueryivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryivRobustANGLEFn(GLenum target,
                                           GLenum pname,
                                           GLsizei bufSize,
@@ -3625,14 +3442,12 @@
   driver_->fn.glGetQueryivRobustANGLEFn(target, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryObjecti64vFn(GLuint id,
                                        GLenum pname,
                                        GLint64* params) {
   driver_->fn.glGetQueryObjecti64vFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryObjecti64vRobustANGLEFn(GLuint id,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -3642,12 +3457,10 @@
                                                 params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryObjectivFn(GLuint id, GLenum pname, GLint* params) {
   driver_->fn.glGetQueryObjectivFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryObjectivRobustANGLEFn(GLuint id,
                                                 GLenum pname,
                                                 GLsizei bufSize,
@@ -3657,14 +3470,12 @@
                                               params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryObjectui64vFn(GLuint id,
                                         GLenum pname,
                                         GLuint64* params) {
   driver_->fn.glGetQueryObjectui64vFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryObjectui64vRobustANGLEFn(GLuint id,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -3674,12 +3485,10 @@
                                                  params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryObjectuivFn(GLuint id, GLenum pname, GLuint* params) {
   driver_->fn.glGetQueryObjectuivFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetQueryObjectuivRobustANGLEFn(GLuint id,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -3689,14 +3498,12 @@
                                                params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetRenderbufferParameterivEXTFn(GLenum target,
                                                   GLenum pname,
                                                   GLint* params) {
   driver_->fn.glGetRenderbufferParameterivEXTFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetRenderbufferParameterivRobustANGLEFn(GLenum target,
                                                           GLenum pname,
                                                           GLsizei bufSize,
@@ -3706,14 +3513,12 @@
                                                         length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetSamplerParameterfvFn(GLuint sampler,
                                           GLenum pname,
                                           GLfloat* params) {
   driver_->fn.glGetSamplerParameterfvFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetSamplerParameterfvRobustANGLEFn(GLuint sampler,
                                                      GLenum pname,
                                                      GLsizei bufSize,
@@ -3723,7 +3528,6 @@
                                                    length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetSamplerParameterIivRobustANGLEFn(GLuint sampler,
                                                       GLenum pname,
                                                       GLsizei bufSize,
@@ -3733,7 +3537,6 @@
                                                     length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetSamplerParameterIuivRobustANGLEFn(GLuint sampler,
                                                        GLenum pname,
                                                        GLsizei bufSize,
@@ -3743,14 +3546,12 @@
                                                      length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetSamplerParameterivFn(GLuint sampler,
                                           GLenum pname,
                                           GLint* params) {
   driver_->fn.glGetSamplerParameterivFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetSamplerParameterivRobustANGLEFn(GLuint sampler,
                                                      GLenum pname,
                                                      GLsizei bufSize,
@@ -3760,7 +3561,6 @@
                                                    length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetShaderInfoLogFn(GLuint shader,
                                      GLsizei bufsize,
                                      GLsizei* length,
@@ -3768,12 +3568,10 @@
   driver_->fn.glGetShaderInfoLogFn(shader, bufsize, length, infolog);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetShaderivFn(GLuint shader, GLenum pname, GLint* params) {
   driver_->fn.glGetShaderivFn(shader, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetShaderivRobustANGLEFn(GLuint shader,
                                            GLenum pname,
                                            GLsizei bufSize,
@@ -3783,7 +3581,6 @@
                                          params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetShaderPrecisionFormatFn(GLenum shadertype,
                                              GLenum precisiontype,
                                              GLint* range,
@@ -3792,7 +3589,6 @@
                                            precision);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetShaderSourceFn(GLuint shader,
                                     GLsizei bufsize,
                                     GLsizei* length,
@@ -3800,17 +3596,14 @@
   driver_->fn.glGetShaderSourceFn(shader, bufsize, length, source);
 }
 
-DISABLE_CFI_ICALL
 const GLubyte* GLApiBase::glGetStringFn(GLenum name) {
   return driver_->fn.glGetStringFn(name);
 }
 
-DISABLE_CFI_ICALL
 const GLubyte* GLApiBase::glGetStringiFn(GLenum name, GLuint index) {
   return driver_->fn.glGetStringiFn(name, index);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetSyncivFn(GLsync sync,
                               GLenum pname,
                               GLsizei bufSize,
@@ -3819,7 +3612,6 @@
   driver_->fn.glGetSyncivFn(sync, pname, bufSize, length, values);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexLevelParameterfvFn(GLenum target,
                                            GLint level,
                                            GLenum pname,
@@ -3827,7 +3619,6 @@
   driver_->fn.glGetTexLevelParameterfvFn(target, level, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexLevelParameterfvRobustANGLEFn(GLenum target,
                                                       GLint level,
                                                       GLenum pname,
@@ -3838,7 +3629,6 @@
                                                     bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexLevelParameterivFn(GLenum target,
                                            GLint level,
                                            GLenum pname,
@@ -3846,7 +3636,6 @@
   driver_->fn.glGetTexLevelParameterivFn(target, level, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexLevelParameterivRobustANGLEFn(GLenum target,
                                                       GLint level,
                                                       GLenum pname,
@@ -3857,14 +3646,12 @@
                                                     bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexParameterfvFn(GLenum target,
                                       GLenum pname,
                                       GLfloat* params) {
   driver_->fn.glGetTexParameterfvFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexParameterfvRobustANGLEFn(GLenum target,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -3874,7 +3661,6 @@
                                                params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexParameterIivRobustANGLEFn(GLenum target,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -3884,7 +3670,6 @@
                                                 params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexParameterIuivRobustANGLEFn(GLenum target,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -3894,14 +3679,12 @@
                                                  params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexParameterivFn(GLenum target,
                                       GLenum pname,
                                       GLint* params) {
   driver_->fn.glGetTexParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTexParameterivRobustANGLEFn(GLenum target,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -3911,7 +3694,6 @@
                                                params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTransformFeedbackVaryingFn(GLuint program,
                                                 GLuint index,
                                                 GLsizei bufSize,
@@ -3923,7 +3705,6 @@
                                               size, type, name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetTranslatedShaderSourceANGLEFn(GLuint shader,
                                                    GLsizei bufsize,
                                                    GLsizei* length,
@@ -3932,20 +3713,17 @@
                                                  source);
 }
 
-DISABLE_CFI_ICALL
 GLuint GLApiBase::glGetUniformBlockIndexFn(GLuint program,
                                            const char* uniformBlockName) {
   return driver_->fn.glGetUniformBlockIndexFn(program, uniformBlockName);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetUniformfvFn(GLuint program,
                                  GLint location,
                                  GLfloat* params) {
   driver_->fn.glGetUniformfvFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetUniformfvRobustANGLEFn(GLuint program,
                                             GLint location,
                                             GLsizei bufSize,
@@ -3955,7 +3733,6 @@
                                           params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetUniformIndicesFn(GLuint program,
                                       GLsizei uniformCount,
                                       const char* const* uniformNames,
@@ -3964,14 +3741,12 @@
                                     uniformIndices);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetUniformivFn(GLuint program,
                                  GLint location,
                                  GLint* params) {
   driver_->fn.glGetUniformivFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetUniformivRobustANGLEFn(GLuint program,
                                             GLint location,
                                             GLsizei bufSize,
@@ -3981,19 +3756,16 @@
                                           params);
 }
 
-DISABLE_CFI_ICALL
 GLint GLApiBase::glGetUniformLocationFn(GLuint program, const char* name) {
   return driver_->fn.glGetUniformLocationFn(program, name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetUniformuivFn(GLuint program,
                                   GLint location,
                                   GLuint* params) {
   driver_->fn.glGetUniformuivFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetUniformuivRobustANGLEFn(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
@@ -4003,14 +3775,12 @@
                                            params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetVertexAttribfvFn(GLuint index,
                                       GLenum pname,
                                       GLfloat* params) {
   driver_->fn.glGetVertexAttribfvFn(index, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetVertexAttribfvRobustANGLEFn(GLuint index,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -4020,7 +3790,6 @@
                                                params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetVertexAttribIivRobustANGLEFn(GLuint index,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -4030,7 +3799,6 @@
                                                 params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetVertexAttribIuivRobustANGLEFn(GLuint index,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -4040,14 +3808,12 @@
                                                  params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetVertexAttribivFn(GLuint index,
                                       GLenum pname,
                                       GLint* params) {
   driver_->fn.glGetVertexAttribivFn(index, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetVertexAttribivRobustANGLEFn(GLuint index,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -4057,14 +3823,12 @@
                                                params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetVertexAttribPointervFn(GLuint index,
                                             GLenum pname,
                                             void** pointer) {
   driver_->fn.glGetVertexAttribPointervFn(index, pname, pointer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glGetVertexAttribPointervRobustANGLEFn(GLuint index,
                                                        GLenum pname,
                                                        GLsizei bufSize,
@@ -4074,24 +3838,20 @@
                                                      length, pointer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glHintFn(GLenum target, GLenum mode) {
   driver_->fn.glHintFn(target, mode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glInsertEventMarkerEXTFn(GLsizei length, const char* marker) {
   driver_->fn.glInsertEventMarkerEXTFn(length, marker);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glInvalidateFramebufferFn(GLenum target,
                                           GLsizei numAttachments,
                                           const GLenum* attachments) {
   driver_->fn.glInvalidateFramebufferFn(target, numAttachments, attachments);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glInvalidateSubFramebufferFn(GLenum target,
                                              GLsizei numAttachments,
                                              const GLenum* attachments,
@@ -4103,97 +3863,78 @@
                                            x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsBufferFn(GLuint buffer) {
   return driver_->fn.glIsBufferFn(buffer);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsEnabledFn(GLenum cap) {
   return driver_->fn.glIsEnabledFn(cap);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsFenceAPPLEFn(GLuint fence) {
   return driver_->fn.glIsFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsFenceNVFn(GLuint fence) {
   return driver_->fn.glIsFenceNVFn(fence);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsFramebufferEXTFn(GLuint framebuffer) {
   return driver_->fn.glIsFramebufferEXTFn(framebuffer);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsPathNVFn(GLuint path) {
   return driver_->fn.glIsPathNVFn(path);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsProgramFn(GLuint program) {
   return driver_->fn.glIsProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsQueryFn(GLuint query) {
   return driver_->fn.glIsQueryFn(query);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsRenderbufferEXTFn(GLuint renderbuffer) {
   return driver_->fn.glIsRenderbufferEXTFn(renderbuffer);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsSamplerFn(GLuint sampler) {
   return driver_->fn.glIsSamplerFn(sampler);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsShaderFn(GLuint shader) {
   return driver_->fn.glIsShaderFn(shader);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsSyncFn(GLsync sync) {
   return driver_->fn.glIsSyncFn(sync);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsTextureFn(GLuint texture) {
   return driver_->fn.glIsTextureFn(texture);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsTransformFeedbackFn(GLuint id) {
   return driver_->fn.glIsTransformFeedbackFn(id);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glIsVertexArrayOESFn(GLuint array) {
   return driver_->fn.glIsVertexArrayOESFn(array);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glLineWidthFn(GLfloat width) {
   driver_->fn.glLineWidthFn(width);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glLinkProgramFn(GLuint program) {
   driver_->fn.glLinkProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void* GLApiBase::glMapBufferFn(GLenum target, GLenum access) {
   return driver_->fn.glMapBufferFn(target, access);
 }
 
-DISABLE_CFI_ICALL
 void* GLApiBase::glMapBufferRangeFn(GLenum target,
                                     GLintptr offset,
                                     GLsizeiptr length,
@@ -4201,22 +3942,18 @@
   return driver_->fn.glMapBufferRangeFn(target, offset, length, access);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glMatrixLoadfEXTFn(GLenum matrixMode, const GLfloat* m) {
   driver_->fn.glMatrixLoadfEXTFn(matrixMode, m);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glMatrixLoadIdentityEXTFn(GLenum matrixMode) {
   driver_->fn.glMatrixLoadIdentityEXTFn(matrixMode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glMemoryBarrierEXTFn(GLbitfield barriers) {
   driver_->fn.glMemoryBarrierEXTFn(barriers);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glObjectLabelFn(GLenum identifier,
                                 GLuint name,
                                 GLsizei length,
@@ -4224,14 +3961,12 @@
   driver_->fn.glObjectLabelFn(identifier, name, length, label);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glObjectPtrLabelFn(void* ptr,
                                    GLsizei length,
                                    const char* label) {
   driver_->fn.glObjectPtrLabelFn(ptr, length, label);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPathCommandsNVFn(GLuint path,
                                    GLsizei numCommands,
                                    const GLubyte* commands,
@@ -4242,62 +3977,50 @@
                                  coordType, coords);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPathParameterfNVFn(GLuint path, GLenum pname, GLfloat value) {
   driver_->fn.glPathParameterfNVFn(path, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPathParameteriNVFn(GLuint path, GLenum pname, GLint value) {
   driver_->fn.glPathParameteriNVFn(path, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPathStencilFuncNVFn(GLenum func, GLint ref, GLuint mask) {
   driver_->fn.glPathStencilFuncNVFn(func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPauseTransformFeedbackFn(void) {
   driver_->fn.glPauseTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPixelStoreiFn(GLenum pname, GLint param) {
   driver_->fn.glPixelStoreiFn(pname, param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPointParameteriFn(GLenum pname, GLint param) {
   driver_->fn.glPointParameteriFn(pname, param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPolygonModeFn(GLenum face, GLenum mode) {
   driver_->fn.glPolygonModeFn(face, mode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPolygonOffsetFn(GLfloat factor, GLfloat units) {
   driver_->fn.glPolygonOffsetFn(factor, units);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPopDebugGroupFn() {
   driver_->fn.glPopDebugGroupFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPopGroupMarkerEXTFn(void) {
   driver_->fn.glPopGroupMarkerEXTFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPrimitiveRestartIndexFn(GLuint index) {
   driver_->fn.glPrimitiveRestartIndexFn(index);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glProgramBinaryFn(GLuint program,
                                   GLenum binaryFormat,
                                   const GLvoid* binary,
@@ -4305,14 +4028,12 @@
   driver_->fn.glProgramBinaryFn(program, binaryFormat, binary, length);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glProgramParameteriFn(GLuint program,
                                       GLenum pname,
                                       GLint value) {
   driver_->fn.glProgramParameteriFn(program, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glProgramPathFragmentInputGenNVFn(GLuint program,
                                                   GLint location,
                                                   GLenum genMode,
@@ -4322,7 +4043,6 @@
                                                 components, coeffs);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPushDebugGroupFn(GLenum source,
                                    GLuint id,
                                    GLsizei length,
@@ -4330,22 +4050,18 @@
   driver_->fn.glPushDebugGroupFn(source, id, length, message);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glPushGroupMarkerEXTFn(GLsizei length, const char* marker) {
   driver_->fn.glPushGroupMarkerEXTFn(length, marker);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glQueryCounterFn(GLuint id, GLenum target) {
   driver_->fn.glQueryCounterFn(id, target);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glReadBufferFn(GLenum src) {
   driver_->fn.glReadBufferFn(src);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glReadnPixelsRobustANGLEFn(GLint x,
                                            GLint y,
                                            GLsizei width,
@@ -4361,7 +4077,6 @@
                                          bufSize, length, columns, rows, data);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glReadPixelsFn(GLint x,
                                GLint y,
                                GLsizei width,
@@ -4372,7 +4087,6 @@
   driver_->fn.glReadPixelsFn(x, y, width, height, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glReadPixelsRobustANGLEFn(GLint x,
                                           GLint y,
                                           GLsizei width,
@@ -4388,12 +4102,10 @@
                                         bufSize, length, columns, rows, pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glReleaseShaderCompilerFn(void) {
   driver_->fn.glReleaseShaderCompilerFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glRenderbufferStorageEXTFn(GLenum target,
                                            GLenum internalformat,
                                            GLsizei width,
@@ -4401,7 +4113,6 @@
   driver_->fn.glRenderbufferStorageEXTFn(target, internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glRenderbufferStorageMultisampleFn(GLenum target,
                                                    GLsizei samples,
                                                    GLenum internalformat,
@@ -4411,7 +4122,6 @@
                                                  internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glRenderbufferStorageMultisampleEXTFn(GLenum target,
                                                       GLsizei samples,
                                                       GLenum internalformat,
@@ -4421,36 +4131,30 @@
       target, samples, internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glRequestExtensionANGLEFn(const char* name) {
   driver_->fn.glRequestExtensionANGLEFn(name);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glResumeTransformFeedbackFn(void) {
   driver_->fn.glResumeTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSampleCoverageFn(GLclampf value, GLboolean invert) {
   driver_->fn.glSampleCoverageFn(value, invert);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSamplerParameterfFn(GLuint sampler,
                                       GLenum pname,
                                       GLfloat param) {
   driver_->fn.glSamplerParameterfFn(sampler, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSamplerParameterfvFn(GLuint sampler,
                                        GLenum pname,
                                        const GLfloat* params) {
   driver_->fn.glSamplerParameterfvFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSamplerParameterfvRobustANGLEFn(GLuint sampler,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -4458,14 +4162,12 @@
   driver_->fn.glSamplerParameterfvRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSamplerParameteriFn(GLuint sampler,
                                       GLenum pname,
                                       GLint param) {
   driver_->fn.glSamplerParameteriFn(sampler, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSamplerParameterIivRobustANGLEFn(GLuint sampler,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -4474,7 +4176,6 @@
                                                  param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSamplerParameterIuivRobustANGLEFn(GLuint sampler,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -4483,14 +4184,12 @@
                                                   param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSamplerParameterivFn(GLuint sampler,
                                        GLenum pname,
                                        const GLint* params) {
   driver_->fn.glSamplerParameterivFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSamplerParameterivRobustANGLEFn(GLuint sampler,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -4498,22 +4197,18 @@
   driver_->fn.glSamplerParameterivRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glScissorFn(GLint x, GLint y, GLsizei width, GLsizei height) {
   driver_->fn.glScissorFn(x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSetFenceAPPLEFn(GLuint fence) {
   driver_->fn.glSetFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glSetFenceNVFn(GLuint fence, GLenum condition) {
   driver_->fn.glSetFenceNVFn(fence, condition);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glShaderBinaryFn(GLsizei n,
                                  const GLuint* shaders,
                                  GLenum binaryformat,
@@ -4522,7 +4217,6 @@
   driver_->fn.glShaderBinaryFn(n, shaders, binaryformat, binary, length);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glShaderSourceFn(GLuint shader,
                                  GLsizei count,
                                  const char* const* str,
@@ -4530,7 +4224,6 @@
   driver_->fn.glShaderSourceFn(shader, count, str, length);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilFillPathInstancedNVFn(GLsizei numPaths,
                                                GLenum pathNameType,
                                                const void* paths,
@@ -4544,19 +4237,16 @@
                                              transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilFillPathNVFn(GLuint path,
                                       GLenum fillMode,
                                       GLuint mask) {
   driver_->fn.glStencilFillPathNVFn(path, fillMode, mask);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilFuncFn(GLenum func, GLint ref, GLuint mask) {
   driver_->fn.glStencilFuncFn(func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilFuncSeparateFn(GLenum face,
                                         GLenum func,
                                         GLint ref,
@@ -4564,22 +4254,18 @@
   driver_->fn.glStencilFuncSeparateFn(face, func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilMaskFn(GLuint mask) {
   driver_->fn.glStencilMaskFn(mask);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilMaskSeparateFn(GLenum face, GLuint mask) {
   driver_->fn.glStencilMaskSeparateFn(face, mask);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilOpFn(GLenum fail, GLenum zfail, GLenum zpass) {
   driver_->fn.glStencilOpFn(fail, zfail, zpass);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilOpSeparateFn(GLenum face,
                                       GLenum fail,
                                       GLenum zfail,
@@ -4587,7 +4273,6 @@
   driver_->fn.glStencilOpSeparateFn(face, fail, zfail, zpass);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilStrokePathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -4602,14 +4287,12 @@
                                                transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilStrokePathNVFn(GLuint path,
                                         GLint reference,
                                         GLuint mask) {
   driver_->fn.glStencilStrokePathNVFn(path, reference, mask);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilThenCoverFillPathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -4625,7 +4308,6 @@
       transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilThenCoverFillPathNVFn(GLuint path,
                                                GLenum fillMode,
                                                GLuint mask,
@@ -4633,7 +4315,6 @@
   driver_->fn.glStencilThenCoverFillPathNVFn(path, fillMode, mask, coverMode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilThenCoverStrokePathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -4649,7 +4330,6 @@
       transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glStencilThenCoverStrokePathNVFn(GLuint path,
                                                  GLint reference,
                                                  GLuint mask,
@@ -4658,24 +4338,20 @@
                                                coverMode);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glTestFenceAPPLEFn(GLuint fence) {
   return driver_->fn.glTestFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glTestFenceNVFn(GLuint fence) {
   return driver_->fn.glTestFenceNVFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexBufferFn(GLenum target,
                               GLenum internalformat,
                               GLuint buffer) {
   driver_->fn.glTexBufferFn(target, internalformat, buffer);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexBufferRangeFn(GLenum target,
                                    GLenum internalformat,
                                    GLuint buffer,
@@ -4684,7 +4360,6 @@
   driver_->fn.glTexBufferRangeFn(target, internalformat, buffer, offset, size);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexImage2DFn(GLenum target,
                                GLint level,
                                GLint internalformat,
@@ -4698,7 +4373,6 @@
                              border, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexImage2DRobustANGLEFn(GLenum target,
                                           GLint level,
                                           GLint internalformat,
@@ -4714,7 +4388,6 @@
                                         pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexImage3DFn(GLenum target,
                                GLint level,
                                GLint internalformat,
@@ -4729,7 +4402,6 @@
                              depth, border, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexImage3DRobustANGLEFn(GLenum target,
                                           GLint level,
                                           GLint internalformat,
@@ -4746,19 +4418,16 @@
                                         bufSize, pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexParameterfFn(GLenum target, GLenum pname, GLfloat param) {
   driver_->fn.glTexParameterfFn(target, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexParameterfvFn(GLenum target,
                                    GLenum pname,
                                    const GLfloat* params) {
   driver_->fn.glTexParameterfvFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexParameterfvRobustANGLEFn(GLenum target,
                                               GLenum pname,
                                               GLsizei bufSize,
@@ -4766,12 +4435,10 @@
   driver_->fn.glTexParameterfvRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexParameteriFn(GLenum target, GLenum pname, GLint param) {
   driver_->fn.glTexParameteriFn(target, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexParameterIivRobustANGLEFn(GLenum target,
                                                GLenum pname,
                                                GLsizei bufSize,
@@ -4779,7 +4446,6 @@
   driver_->fn.glTexParameterIivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexParameterIuivRobustANGLEFn(GLenum target,
                                                 GLenum pname,
                                                 GLsizei bufSize,
@@ -4787,14 +4453,12 @@
   driver_->fn.glTexParameterIuivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexParameterivFn(GLenum target,
                                    GLenum pname,
                                    const GLint* params) {
   driver_->fn.glTexParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexParameterivRobustANGLEFn(GLenum target,
                                               GLenum pname,
                                               GLsizei bufSize,
@@ -4802,7 +4466,6 @@
   driver_->fn.glTexParameterivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexStorage2DEXTFn(GLenum target,
                                     GLsizei levels,
                                     GLenum internalformat,
@@ -4812,7 +4475,6 @@
                                   height);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexStorage3DFn(GLenum target,
                                  GLsizei levels,
                                  GLenum internalformat,
@@ -4823,7 +4485,6 @@
                                depth);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexSubImage2DFn(GLenum target,
                                   GLint level,
                                   GLint xoffset,
@@ -4837,7 +4498,6 @@
                                 format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexSubImage2DRobustANGLEFn(GLenum target,
                                              GLint level,
                                              GLint xoffset,
@@ -4853,7 +4513,6 @@
                                            pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexSubImage3DFn(GLenum target,
                                   GLint level,
                                   GLint xoffset,
@@ -4869,7 +4528,6 @@
                                 height, depth, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTexSubImage3DRobustANGLEFn(GLenum target,
                                              GLint level,
                                              GLint xoffset,
@@ -4887,7 +4545,6 @@
                                            format, type, bufSize, pixels);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glTransformFeedbackVaryingsFn(GLuint program,
                                               GLsizei count,
                                               const char* const* varyings,
@@ -4896,97 +4553,80 @@
                                             bufferMode);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform1fFn(GLint location, GLfloat x) {
   driver_->fn.glUniform1fFn(location, x);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform1fvFn(GLint location,
                                GLsizei count,
                                const GLfloat* v) {
   driver_->fn.glUniform1fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform1iFn(GLint location, GLint x) {
   driver_->fn.glUniform1iFn(location, x);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform1ivFn(GLint location, GLsizei count, const GLint* v) {
   driver_->fn.glUniform1ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform1uiFn(GLint location, GLuint v0) {
   driver_->fn.glUniform1uiFn(location, v0);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform1uivFn(GLint location,
                                 GLsizei count,
                                 const GLuint* v) {
   driver_->fn.glUniform1uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform2fFn(GLint location, GLfloat x, GLfloat y) {
   driver_->fn.glUniform2fFn(location, x, y);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform2fvFn(GLint location,
                                GLsizei count,
                                const GLfloat* v) {
   driver_->fn.glUniform2fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform2iFn(GLint location, GLint x, GLint y) {
   driver_->fn.glUniform2iFn(location, x, y);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform2ivFn(GLint location, GLsizei count, const GLint* v) {
   driver_->fn.glUniform2ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform2uiFn(GLint location, GLuint v0, GLuint v1) {
   driver_->fn.glUniform2uiFn(location, v0, v1);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform2uivFn(GLint location,
                                 GLsizei count,
                                 const GLuint* v) {
   driver_->fn.glUniform2uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform3fFn(GLint location, GLfloat x, GLfloat y, GLfloat z) {
   driver_->fn.glUniform3fFn(location, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform3fvFn(GLint location,
                                GLsizei count,
                                const GLfloat* v) {
   driver_->fn.glUniform3fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform3iFn(GLint location, GLint x, GLint y, GLint z) {
   driver_->fn.glUniform3iFn(location, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform3ivFn(GLint location, GLsizei count, const GLint* v) {
   driver_->fn.glUniform3ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform3uiFn(GLint location,
                                GLuint v0,
                                GLuint v1,
@@ -4994,14 +4634,12 @@
   driver_->fn.glUniform3uiFn(location, v0, v1, v2);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform3uivFn(GLint location,
                                 GLsizei count,
                                 const GLuint* v) {
   driver_->fn.glUniform3uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform4fFn(GLint location,
                               GLfloat x,
                               GLfloat y,
@@ -5010,14 +4648,12 @@
   driver_->fn.glUniform4fFn(location, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform4fvFn(GLint location,
                                GLsizei count,
                                const GLfloat* v) {
   driver_->fn.glUniform4fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform4iFn(GLint location,
                               GLint x,
                               GLint y,
@@ -5026,12 +4662,10 @@
   driver_->fn.glUniform4iFn(location, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform4ivFn(GLint location, GLsizei count, const GLint* v) {
   driver_->fn.glUniform4ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform4uiFn(GLint location,
                                GLuint v0,
                                GLuint v1,
@@ -5040,14 +4674,12 @@
   driver_->fn.glUniform4uiFn(location, v0, v1, v2, v3);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniform4uivFn(GLint location,
                                 GLsizei count,
                                 const GLuint* v) {
   driver_->fn.glUniform4uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformBlockBindingFn(GLuint program,
                                         GLuint uniformBlockIndex,
                                         GLuint uniformBlockBinding) {
@@ -5055,7 +4687,6 @@
                                       uniformBlockBinding);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix2fvFn(GLint location,
                                      GLsizei count,
                                      GLboolean transpose,
@@ -5063,7 +4694,6 @@
   driver_->fn.glUniformMatrix2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix2x3fvFn(GLint location,
                                        GLsizei count,
                                        GLboolean transpose,
@@ -5071,7 +4701,6 @@
   driver_->fn.glUniformMatrix2x3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix2x4fvFn(GLint location,
                                        GLsizei count,
                                        GLboolean transpose,
@@ -5079,7 +4708,6 @@
   driver_->fn.glUniformMatrix2x4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix3fvFn(GLint location,
                                      GLsizei count,
                                      GLboolean transpose,
@@ -5087,7 +4715,6 @@
   driver_->fn.glUniformMatrix3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix3x2fvFn(GLint location,
                                        GLsizei count,
                                        GLboolean transpose,
@@ -5095,7 +4722,6 @@
   driver_->fn.glUniformMatrix3x2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix3x4fvFn(GLint location,
                                        GLsizei count,
                                        GLboolean transpose,
@@ -5103,7 +4729,6 @@
   driver_->fn.glUniformMatrix3x4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix4fvFn(GLint location,
                                      GLsizei count,
                                      GLboolean transpose,
@@ -5111,7 +4736,6 @@
   driver_->fn.glUniformMatrix4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix4x2fvFn(GLint location,
                                        GLsizei count,
                                        GLboolean transpose,
@@ -5119,7 +4743,6 @@
   driver_->fn.glUniformMatrix4x2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUniformMatrix4x3fvFn(GLint location,
                                        GLsizei count,
                                        GLboolean transpose,
@@ -5127,42 +4750,34 @@
   driver_->fn.glUniformMatrix4x3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 GLboolean GLApiBase::glUnmapBufferFn(GLenum target) {
   return driver_->fn.glUnmapBufferFn(target);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glUseProgramFn(GLuint program) {
   driver_->fn.glUseProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glValidateProgramFn(GLuint program) {
   driver_->fn.glValidateProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttrib1fFn(GLuint indx, GLfloat x) {
   driver_->fn.glVertexAttrib1fFn(indx, x);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttrib1fvFn(GLuint indx, const GLfloat* values) {
   driver_->fn.glVertexAttrib1fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttrib2fFn(GLuint indx, GLfloat x, GLfloat y) {
   driver_->fn.glVertexAttrib2fFn(indx, x, y);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttrib2fvFn(GLuint indx, const GLfloat* values) {
   driver_->fn.glVertexAttrib2fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttrib3fFn(GLuint indx,
                                    GLfloat x,
                                    GLfloat y,
@@ -5170,12 +4785,10 @@
   driver_->fn.glVertexAttrib3fFn(indx, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttrib3fvFn(GLuint indx, const GLfloat* values) {
   driver_->fn.glVertexAttrib3fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttrib4fFn(GLuint indx,
                                    GLfloat x,
                                    GLfloat y,
@@ -5184,17 +4797,14 @@
   driver_->fn.glVertexAttrib4fFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttrib4fvFn(GLuint indx, const GLfloat* values) {
   driver_->fn.glVertexAttrib4fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttribDivisorANGLEFn(GLuint index, GLuint divisor) {
   driver_->fn.glVertexAttribDivisorANGLEFn(index, divisor);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttribI4iFn(GLuint indx,
                                     GLint x,
                                     GLint y,
@@ -5203,12 +4813,10 @@
   driver_->fn.glVertexAttribI4iFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttribI4ivFn(GLuint indx, const GLint* values) {
   driver_->fn.glVertexAttribI4ivFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttribI4uiFn(GLuint indx,
                                      GLuint x,
                                      GLuint y,
@@ -5217,12 +4825,10 @@
   driver_->fn.glVertexAttribI4uiFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttribI4uivFn(GLuint indx, const GLuint* values) {
   driver_->fn.glVertexAttribI4uivFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttribIPointerFn(GLuint indx,
                                          GLint size,
                                          GLenum type,
@@ -5231,7 +4837,6 @@
   driver_->fn.glVertexAttribIPointerFn(indx, size, type, stride, ptr);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glVertexAttribPointerFn(GLuint indx,
                                         GLint size,
                                         GLenum type,
@@ -5242,55 +4847,46 @@
                                       ptr);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glViewportFn(GLint x, GLint y, GLsizei width, GLsizei height) {
   driver_->fn.glViewportFn(x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) {
   driver_->fn.glWaitSyncFn(sync, flags, timeout);
 }
 
-DISABLE_CFI_ICALL
 void GLApiBase::glWindowRectanglesEXTFn(GLenum mode,
                                         GLsizei n,
                                         const GLint* box) {
   driver_->fn.glWindowRectanglesEXTFn(mode, n, box);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glActiveTextureFn(GLenum texture) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glActiveTexture")
   gl_api_->glActiveTextureFn(texture);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glApplyFramebufferAttachmentCMAAINTELFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0(
       "gpu", "TraceGLAPI::glApplyFramebufferAttachmentCMAAINTEL")
   gl_api_->glApplyFramebufferAttachmentCMAAINTELFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glAttachShaderFn(GLuint program, GLuint shader) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glAttachShader")
   gl_api_->glAttachShaderFn(program, shader);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBeginQueryFn(GLenum target, GLuint id) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBeginQuery")
   gl_api_->glBeginQueryFn(target, id);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBeginTransformFeedbackFn(GLenum primitiveMode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBeginTransformFeedback")
   gl_api_->glBeginTransformFeedbackFn(primitiveMode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindAttribLocationFn(GLuint program,
                                         GLuint index,
                                         const char* name) {
@@ -5298,13 +4894,11 @@
   gl_api_->glBindAttribLocationFn(program, index, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindBufferFn(GLenum target, GLuint buffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBindBuffer")
   gl_api_->glBindBufferFn(target, buffer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindBufferBaseFn(GLenum target,
                                     GLuint index,
                                     GLuint buffer) {
@@ -5312,7 +4906,6 @@
   gl_api_->glBindBufferBaseFn(target, index, buffer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindBufferRangeFn(GLenum target,
                                      GLuint index,
                                      GLuint buffer,
@@ -5322,7 +4915,6 @@
   gl_api_->glBindBufferRangeFn(target, index, buffer, offset, size);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindFragDataLocationFn(GLuint program,
                                           GLuint colorNumber,
                                           const char* name) {
@@ -5330,7 +4922,6 @@
   gl_api_->glBindFragDataLocationFn(program, colorNumber, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindFragDataLocationIndexedFn(GLuint program,
                                                  GLuint colorNumber,
                                                  GLuint index,
@@ -5340,13 +4931,11 @@
   gl_api_->glBindFragDataLocationIndexedFn(program, colorNumber, index, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindFramebufferEXTFn(GLenum target, GLuint framebuffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBindFramebufferEXT")
   gl_api_->glBindFramebufferEXTFn(target, framebuffer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindImageTextureEXTFn(GLuint index,
                                          GLuint texture,
                                          GLint level,
@@ -5359,31 +4948,26 @@
                                    access, format);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindRenderbufferEXTFn(GLenum target, GLuint renderbuffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBindRenderbufferEXT")
   gl_api_->glBindRenderbufferEXTFn(target, renderbuffer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindSamplerFn(GLuint unit, GLuint sampler) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBindSampler")
   gl_api_->glBindSamplerFn(unit, sampler);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindTextureFn(GLenum target, GLuint texture) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBindTexture")
   gl_api_->glBindTextureFn(target, texture);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindTransformFeedbackFn(GLenum target, GLuint id) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBindTransformFeedback")
   gl_api_->glBindTransformFeedbackFn(target, id);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindUniformLocationCHROMIUMFn(GLuint program,
                                                  GLint location,
                                                  const char* name) {
@@ -5392,19 +4976,16 @@
   gl_api_->glBindUniformLocationCHROMIUMFn(program, location, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBindVertexArrayOESFn(GLuint array) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBindVertexArrayOES")
   gl_api_->glBindVertexArrayOESFn(array);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBlendBarrierKHRFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBlendBarrierKHR")
   gl_api_->glBlendBarrierKHRFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBlendColorFn(GLclampf red,
                                 GLclampf green,
                                 GLclampf blue,
@@ -5413,25 +4994,21 @@
   gl_api_->glBlendColorFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBlendEquationFn(GLenum mode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBlendEquation")
   gl_api_->glBlendEquationFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBlendEquationSeparateFn(GLenum modeRGB, GLenum modeAlpha) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBlendEquationSeparate")
   gl_api_->glBlendEquationSeparateFn(modeRGB, modeAlpha);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBlendFuncFn(GLenum sfactor, GLenum dfactor) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glBlendFunc")
   gl_api_->glBlendFuncFn(sfactor, dfactor);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBlendFuncSeparateFn(GLenum srcRGB,
                                        GLenum dstRGB,
                                        GLenum srcAlpha,
@@ -5440,7 +5017,6 @@
   gl_api_->glBlendFuncSeparateFn(srcRGB, dstRGB, srcAlpha, dstAlpha);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBlitFramebufferFn(GLint srcX0,
                                      GLint srcY0,
                                      GLint srcX1,
@@ -5456,7 +5032,6 @@
                                dstY1, mask, filter);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBufferDataFn(GLenum target,
                                 GLsizeiptr size,
                                 const void* data,
@@ -5465,7 +5040,6 @@
   gl_api_->glBufferDataFn(target, size, data, usage);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glBufferSubDataFn(GLenum target,
                                    GLintptr offset,
                                    GLsizeiptr size,
@@ -5474,20 +5048,17 @@
   gl_api_->glBufferSubDataFn(target, offset, size, data);
 }
 
-DISABLE_CFI_ICALL
 GLenum TraceGLApi::glCheckFramebufferStatusEXTFn(GLenum target) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
                                 "TraceGLAPI::glCheckFramebufferStatusEXT")
   return gl_api_->glCheckFramebufferStatusEXTFn(target);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearFn(GLbitfield mask) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glClear")
   gl_api_->glClearFn(mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearBufferfiFn(GLenum buffer,
                                    GLint drawbuffer,
                                    const GLfloat depth,
@@ -5496,7 +5067,6 @@
   gl_api_->glClearBufferfiFn(buffer, drawbuffer, depth, stencil);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearBufferfvFn(GLenum buffer,
                                    GLint drawbuffer,
                                    const GLfloat* value) {
@@ -5504,7 +5074,6 @@
   gl_api_->glClearBufferfvFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearBufferivFn(GLenum buffer,
                                    GLint drawbuffer,
                                    const GLint* value) {
@@ -5512,7 +5081,6 @@
   gl_api_->glClearBufferivFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearBufferuivFn(GLenum buffer,
                                     GLint drawbuffer,
                                     const GLuint* value) {
@@ -5520,7 +5088,6 @@
   gl_api_->glClearBufferuivFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearColorFn(GLclampf red,
                                 GLclampf green,
                                 GLclampf blue,
@@ -5529,25 +5096,21 @@
   gl_api_->glClearColorFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearDepthFn(GLclampd depth) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glClearDepth")
   gl_api_->glClearDepthFn(depth);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearDepthfFn(GLclampf depth) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glClearDepthf")
   gl_api_->glClearDepthfFn(depth);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glClearStencilFn(GLint s) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glClearStencil")
   gl_api_->glClearStencilFn(s);
 }
 
-DISABLE_CFI_ICALL
 GLenum TraceGLApi::glClientWaitSyncFn(GLsync sync,
                                       GLbitfield flags,
                                       GLuint64 timeout) {
@@ -5555,7 +5118,6 @@
   return gl_api_->glClientWaitSyncFn(sync, flags, timeout);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glColorMaskFn(GLboolean red,
                                GLboolean green,
                                GLboolean blue,
@@ -5564,13 +5126,11 @@
   gl_api_->glColorMaskFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompileShaderFn(GLuint shader) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glCompileShader")
   gl_api_->glCompileShaderFn(shader);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedCopyTextureCHROMIUMFn(GLuint sourceId,
                                                    GLuint destId) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
@@ -5578,7 +5138,6 @@
   gl_api_->glCompressedCopyTextureCHROMIUMFn(sourceId, destId);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedTexImage2DFn(GLenum target,
                                           GLint level,
                                           GLenum internalformat,
@@ -5592,7 +5151,6 @@
                                     height, border, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedTexImage2DRobustANGLEFn(GLenum target,
                                                      GLint level,
                                                      GLenum internalformat,
@@ -5609,7 +5167,6 @@
                                                dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedTexImage3DFn(GLenum target,
                                           GLint level,
                                           GLenum internalformat,
@@ -5624,7 +5181,6 @@
                                     height, depth, border, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedTexImage3DRobustANGLEFn(GLenum target,
                                                      GLint level,
                                                      GLenum internalformat,
@@ -5642,7 +5198,6 @@
                                                imageSize, dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedTexSubImage2DFn(GLenum target,
                                              GLint level,
                                              GLint xoffset,
@@ -5657,7 +5212,6 @@
                                        height, format, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedTexSubImage2DRobustANGLEFn(GLenum target,
                                                         GLint level,
                                                         GLint xoffset,
@@ -5675,7 +5229,6 @@
       dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedTexSubImage3DFn(GLenum target,
                                              GLint level,
                                              GLint xoffset,
@@ -5693,7 +5246,6 @@
                                        data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCompressedTexSubImage3DRobustANGLEFn(GLenum target,
                                                         GLint level,
                                                         GLint xoffset,
@@ -5713,7 +5265,6 @@
       imageSize, dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCopyBufferSubDataFn(GLenum readTarget,
                                        GLenum writeTarget,
                                        GLintptr readOffset,
@@ -5724,7 +5275,6 @@
                                  writeOffset, size);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCopySubTextureCHROMIUMFn(GLuint sourceId,
                                             GLint sourceLevel,
                                             GLenum destTarget,
@@ -5746,7 +5296,6 @@
       unpackUnmultiplyAlpha);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCopyTexImage2DFn(GLenum target,
                                     GLint level,
                                     GLenum internalformat,
@@ -5760,7 +5309,6 @@
                               height, border);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCopyTexSubImage2DFn(GLenum target,
                                        GLint level,
                                        GLint xoffset,
@@ -5774,7 +5322,6 @@
                                  height);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCopyTexSubImage3DFn(GLenum target,
                                        GLint level,
                                        GLint xoffset,
@@ -5789,7 +5336,6 @@
                                  width, height);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCopyTextureCHROMIUMFn(GLuint sourceId,
                                          GLint sourceLevel,
                                          GLenum destTarget,
@@ -5806,13 +5352,11 @@
       destType, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCoverageModulationNVFn(GLenum components) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glCoverageModulationNV")
   gl_api_->glCoverageModulationNVFn(components);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCoverFillPathInstancedNVFn(GLsizei numPaths,
                                               GLenum pathNameType,
                                               const void* paths,
@@ -5826,13 +5370,11 @@
                                         transformValues);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCoverFillPathNVFn(GLuint path, GLenum coverMode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glCoverFillPathNV")
   gl_api_->glCoverFillPathNVFn(path, coverMode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCoverStrokePathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -5848,38 +5390,32 @@
                                           transformValues);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCoverStrokePathNVFn(GLuint name, GLenum coverMode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glCoverStrokePathNV")
   gl_api_->glCoverStrokePathNVFn(name, coverMode);
 }
 
-DISABLE_CFI_ICALL
 GLuint TraceGLApi::glCreateProgramFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glCreateProgram")
   return gl_api_->glCreateProgramFn();
 }
 
-DISABLE_CFI_ICALL
 GLuint TraceGLApi::glCreateShaderFn(GLenum type) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glCreateShader")
   return gl_api_->glCreateShaderFn(type);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glCullFaceFn(GLenum mode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glCullFace")
   gl_api_->glCullFaceFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDebugMessageCallbackFn(GLDEBUGPROC callback,
                                           const void* userParam) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDebugMessageCallback")
   gl_api_->glDebugMessageCallbackFn(callback, userParam);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDebugMessageControlFn(GLenum source,
                                          GLenum type,
                                          GLenum severity,
@@ -5890,7 +5426,6 @@
   gl_api_->glDebugMessageControlFn(source, type, severity, count, ids, enabled);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDebugMessageInsertFn(GLenum source,
                                         GLenum type,
                                         GLuint id,
@@ -5901,135 +5436,113 @@
   gl_api_->glDebugMessageInsertFn(source, type, id, severity, length, buf);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteBuffersARBFn(GLsizei n, const GLuint* buffers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteBuffersARB")
   gl_api_->glDeleteBuffersARBFn(n, buffers);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteFencesAPPLEFn(GLsizei n, const GLuint* fences) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteFencesAPPLE")
   gl_api_->glDeleteFencesAPPLEFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteFencesNVFn(GLsizei n, const GLuint* fences) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteFencesNV")
   gl_api_->glDeleteFencesNVFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteFramebuffersEXTFn(GLsizei n,
                                            const GLuint* framebuffers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteFramebuffersEXT")
   gl_api_->glDeleteFramebuffersEXTFn(n, framebuffers);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeletePathsNVFn(GLuint path, GLsizei range) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeletePathsNV")
   gl_api_->glDeletePathsNVFn(path, range);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteProgramFn(GLuint program) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteProgram")
   gl_api_->glDeleteProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteQueriesFn(GLsizei n, const GLuint* ids) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteQueries")
   gl_api_->glDeleteQueriesFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteRenderbuffersEXTFn(GLsizei n,
                                             const GLuint* renderbuffers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteRenderbuffersEXT")
   gl_api_->glDeleteRenderbuffersEXTFn(n, renderbuffers);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteSamplersFn(GLsizei n, const GLuint* samplers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteSamplers")
   gl_api_->glDeleteSamplersFn(n, samplers);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteShaderFn(GLuint shader) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteShader")
   gl_api_->glDeleteShaderFn(shader);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteSyncFn(GLsync sync) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteSync")
   gl_api_->glDeleteSyncFn(sync);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteTexturesFn(GLsizei n, const GLuint* textures) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteTextures")
   gl_api_->glDeleteTexturesFn(n, textures);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteTransformFeedbacksFn(GLsizei n, const GLuint* ids) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteTransformFeedbacks")
   gl_api_->glDeleteTransformFeedbacksFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDeleteVertexArraysOESFn(GLsizei n, const GLuint* arrays) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDeleteVertexArraysOES")
   gl_api_->glDeleteVertexArraysOESFn(n, arrays);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDepthFuncFn(GLenum func) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDepthFunc")
   gl_api_->glDepthFuncFn(func);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDepthMaskFn(GLboolean flag) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDepthMask")
   gl_api_->glDepthMaskFn(flag);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDepthRangeFn(GLclampd zNear, GLclampd zFar) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDepthRange")
   gl_api_->glDepthRangeFn(zNear, zFar);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDepthRangefFn(GLclampf zNear, GLclampf zFar) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDepthRangef")
   gl_api_->glDepthRangefFn(zNear, zFar);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDetachShaderFn(GLuint program, GLuint shader) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDetachShader")
   gl_api_->glDetachShaderFn(program, shader);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDisableFn(GLenum cap) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDisable")
   gl_api_->glDisableFn(cap);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDisableVertexAttribArrayFn(GLuint index) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDisableVertexAttribArray")
   gl_api_->glDisableVertexAttribArrayFn(index);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDiscardFramebufferEXTFn(GLenum target,
                                            GLsizei numAttachments,
                                            const GLenum* attachments) {
@@ -6037,13 +5550,11 @@
   gl_api_->glDiscardFramebufferEXTFn(target, numAttachments, attachments);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDrawArraysFn(GLenum mode, GLint first, GLsizei count) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDrawArrays")
   gl_api_->glDrawArraysFn(mode, first, count);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDrawArraysInstancedANGLEFn(GLenum mode,
                                               GLint first,
                                               GLsizei count,
@@ -6052,19 +5563,16 @@
   gl_api_->glDrawArraysInstancedANGLEFn(mode, first, count, primcount);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDrawBufferFn(GLenum mode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDrawBuffer")
   gl_api_->glDrawBufferFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDrawBuffersARBFn(GLsizei n, const GLenum* bufs) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glDrawBuffersARB")
   gl_api_->glDrawBuffersARBFn(n, bufs);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDrawElementsFn(GLenum mode,
                                   GLsizei count,
                                   GLenum type,
@@ -6073,7 +5581,6 @@
   gl_api_->glDrawElementsFn(mode, count, type, indices);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDrawElementsInstancedANGLEFn(GLenum mode,
                                                 GLsizei count,
                                                 GLenum type,
@@ -6085,7 +5592,6 @@
                                           primcount);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glDrawRangeElementsFn(GLenum mode,
                                        GLuint start,
                                        GLuint end,
@@ -6096,7 +5602,6 @@
   gl_api_->glDrawRangeElementsFn(mode, start, end, count, type, indices);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glEGLImageTargetRenderbufferStorageOESFn(GLenum target,
                                                           GLeglImageOES image) {
   TRACE_EVENT_BINARY_EFFICIENT0(
@@ -6104,7 +5609,6 @@
   gl_api_->glEGLImageTargetRenderbufferStorageOESFn(target, image);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glEGLImageTargetTexture2DOESFn(GLenum target,
                                                 GLeglImageOES image) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
@@ -6112,61 +5616,51 @@
   gl_api_->glEGLImageTargetTexture2DOESFn(target, image);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glEnableFn(GLenum cap) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glEnable")
   gl_api_->glEnableFn(cap);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glEnableVertexAttribArrayFn(GLuint index) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glEnableVertexAttribArray")
   gl_api_->glEnableVertexAttribArrayFn(index);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glEndQueryFn(GLenum target) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glEndQuery")
   gl_api_->glEndQueryFn(target);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glEndTransformFeedbackFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glEndTransformFeedback")
   gl_api_->glEndTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 GLsync TraceGLApi::glFenceSyncFn(GLenum condition, GLbitfield flags) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glFenceSync")
   return gl_api_->glFenceSyncFn(condition, flags);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFinishFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glFinish")
   gl_api_->glFinishFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFinishFenceAPPLEFn(GLuint fence) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glFinishFenceAPPLE")
   gl_api_->glFinishFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFinishFenceNVFn(GLuint fence) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glFinishFenceNV")
   gl_api_->glFinishFenceNVFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFlushFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glFlush")
   gl_api_->glFlushFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFlushMappedBufferRangeFn(GLenum target,
                                             GLintptr offset,
                                             GLsizeiptr length) {
@@ -6174,7 +5668,6 @@
   gl_api_->glFlushMappedBufferRangeFn(target, offset, length);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFramebufferRenderbufferEXTFn(GLenum target,
                                                 GLenum attachment,
                                                 GLenum renderbuffertarget,
@@ -6185,7 +5678,6 @@
                                           renderbuffertarget, renderbuffer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFramebufferTexture2DEXTFn(GLenum target,
                                              GLenum attachment,
                                              GLenum textarget,
@@ -6196,7 +5688,6 @@
                                        level);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFramebufferTexture2DMultisampleEXTFn(GLenum target,
                                                         GLenum attachment,
                                                         GLenum textarget,
@@ -6209,7 +5700,6 @@
                                                   texture, level, samples);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFramebufferTextureLayerFn(GLenum target,
                                              GLenum attachment,
                                              GLuint texture,
@@ -6220,85 +5710,71 @@
                                        layer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glFrontFaceFn(GLenum mode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glFrontFace")
   gl_api_->glFrontFaceFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenBuffersARBFn(GLsizei n, GLuint* buffers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenBuffersARB")
   gl_api_->glGenBuffersARBFn(n, buffers);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenerateMipmapEXTFn(GLenum target) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenerateMipmapEXT")
   gl_api_->glGenerateMipmapEXTFn(target);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenFencesAPPLEFn(GLsizei n, GLuint* fences) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenFencesAPPLE")
   gl_api_->glGenFencesAPPLEFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenFencesNVFn(GLsizei n, GLuint* fences) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenFencesNV")
   gl_api_->glGenFencesNVFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenFramebuffersEXTFn(GLsizei n, GLuint* framebuffers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenFramebuffersEXT")
   gl_api_->glGenFramebuffersEXTFn(n, framebuffers);
 }
 
-DISABLE_CFI_ICALL
 GLuint TraceGLApi::glGenPathsNVFn(GLsizei range) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenPathsNV")
   return gl_api_->glGenPathsNVFn(range);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenQueriesFn(GLsizei n, GLuint* ids) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenQueries")
   gl_api_->glGenQueriesFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenRenderbuffersEXTFn(GLsizei n, GLuint* renderbuffers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenRenderbuffersEXT")
   gl_api_->glGenRenderbuffersEXTFn(n, renderbuffers);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenSamplersFn(GLsizei n, GLuint* samplers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenSamplers")
   gl_api_->glGenSamplersFn(n, samplers);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenTexturesFn(GLsizei n, GLuint* textures) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenTextures")
   gl_api_->glGenTexturesFn(n, textures);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenTransformFeedbacksFn(GLsizei n, GLuint* ids) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenTransformFeedbacks")
   gl_api_->glGenTransformFeedbacksFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGenVertexArraysOESFn(GLsizei n, GLuint* arrays) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGenVertexArraysOES")
   gl_api_->glGenVertexArraysOESFn(n, arrays);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetActiveAttribFn(GLuint program,
                                      GLuint index,
                                      GLsizei bufsize,
@@ -6311,7 +5787,6 @@
                                name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetActiveUniformFn(GLuint program,
                                       GLuint index,
                                       GLsizei bufsize,
@@ -6324,7 +5799,6 @@
                                 name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetActiveUniformBlockivFn(GLuint program,
                                              GLuint uniformBlockIndex,
                                              GLenum pname,
@@ -6334,7 +5808,6 @@
                                        params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetActiveUniformBlockivRobustANGLEFn(
     GLuint program,
     GLuint uniformBlockIndex,
@@ -6348,7 +5821,6 @@
       program, uniformBlockIndex, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetActiveUniformBlockNameFn(GLuint program,
                                                GLuint uniformBlockIndex,
                                                GLsizei bufSize,
@@ -6360,7 +5832,6 @@
                                          length, uniformBlockName);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetActiveUniformsivFn(GLuint program,
                                          GLsizei uniformCount,
                                          const GLuint* uniformIndices,
@@ -6371,7 +5842,6 @@
                                    params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetAttachedShadersFn(GLuint program,
                                         GLsizei maxcount,
                                         GLsizei* count,
@@ -6380,13 +5850,11 @@
   gl_api_->glGetAttachedShadersFn(program, maxcount, count, shaders);
 }
 
-DISABLE_CFI_ICALL
 GLint TraceGLApi::glGetAttribLocationFn(GLuint program, const char* name) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetAttribLocation")
   return gl_api_->glGetAttribLocationFn(program, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetBooleani_vRobustANGLEFn(GLenum target,
                                               GLuint index,
                                               GLsizei bufSize,
@@ -6396,13 +5864,11 @@
   gl_api_->glGetBooleani_vRobustANGLEFn(target, index, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetBooleanvFn(GLenum pname, GLboolean* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetBooleanv")
   gl_api_->glGetBooleanvFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetBooleanvRobustANGLEFn(GLenum pname,
                                             GLsizei bufSize,
                                             GLsizei* length,
@@ -6411,7 +5877,6 @@
   gl_api_->glGetBooleanvRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetBufferParameteri64vRobustANGLEFn(GLenum target,
                                                        GLenum pname,
                                                        GLsizei bufSize,
@@ -6423,7 +5888,6 @@
                                                  params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetBufferParameterivFn(GLenum target,
                                           GLenum pname,
                                           GLint* params) {
@@ -6431,7 +5895,6 @@
   gl_api_->glGetBufferParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetBufferParameterivRobustANGLEFn(GLenum target,
                                                      GLenum pname,
                                                      GLsizei bufSize,
@@ -6443,7 +5906,6 @@
                                                params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetBufferPointervRobustANGLEFn(GLenum target,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -6455,7 +5917,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetDebugMessageLogFn(GLuint count,
                                         GLsizei bufSize,
                                         GLenum* sources,
@@ -6469,25 +5930,21 @@
                                   severities, lengths, messageLog);
 }
 
-DISABLE_CFI_ICALL
 GLenum TraceGLApi::glGetErrorFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetError")
   return gl_api_->glGetErrorFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetFenceivNVFn(GLuint fence, GLenum pname, GLint* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetFenceivNV")
   gl_api_->glGetFenceivNVFn(fence, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetFloatvFn(GLenum pname, GLfloat* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetFloatv")
   gl_api_->glGetFloatvFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetFloatvRobustANGLEFn(GLenum pname,
                                           GLsizei bufSize,
                                           GLsizei* length,
@@ -6496,19 +5953,16 @@
   gl_api_->glGetFloatvRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 GLint TraceGLApi::glGetFragDataIndexFn(GLuint program, const char* name) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetFragDataIndex")
   return gl_api_->glGetFragDataIndexFn(program, name);
 }
 
-DISABLE_CFI_ICALL
 GLint TraceGLApi::glGetFragDataLocationFn(GLuint program, const char* name) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetFragDataLocation")
   return gl_api_->glGetFragDataLocationFn(program, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetFramebufferAttachmentParameterivEXTFn(GLenum target,
                                                             GLenum attachment,
                                                             GLenum pname,
@@ -6519,7 +5973,6 @@
                                                       params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetFramebufferAttachmentParameterivRobustANGLEFn(
     GLenum target,
     GLenum attachment,
@@ -6533,7 +5986,6 @@
       target, attachment, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetFramebufferParameterivRobustANGLEFn(GLenum target,
                                                           GLenum pname,
                                                           GLsizei bufSize,
@@ -6545,14 +5997,12 @@
                                                     length, params);
 }
 
-DISABLE_CFI_ICALL
 GLenum TraceGLApi::glGetGraphicsResetStatusARBFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
                                 "TraceGLAPI::glGetGraphicsResetStatusARB")
   return gl_api_->glGetGraphicsResetStatusARBFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetInteger64i_vFn(GLenum target,
                                      GLuint index,
                                      GLint64* data) {
@@ -6560,7 +6010,6 @@
   gl_api_->glGetInteger64i_vFn(target, index, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetInteger64i_vRobustANGLEFn(GLenum target,
                                                 GLuint index,
                                                 GLsizei bufSize,
@@ -6571,13 +6020,11 @@
   gl_api_->glGetInteger64i_vRobustANGLEFn(target, index, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetInteger64vFn(GLenum pname, GLint64* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetInteger64v")
   gl_api_->glGetInteger64vFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetInteger64vRobustANGLEFn(GLenum pname,
                                               GLsizei bufSize,
                                               GLsizei* length,
@@ -6586,13 +6033,11 @@
   gl_api_->glGetInteger64vRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetIntegeri_vFn(GLenum target, GLuint index, GLint* data) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetIntegeri_v")
   gl_api_->glGetIntegeri_vFn(target, index, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetIntegeri_vRobustANGLEFn(GLenum target,
                                               GLuint index,
                                               GLsizei bufSize,
@@ -6602,13 +6047,11 @@
   gl_api_->glGetIntegeri_vRobustANGLEFn(target, index, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetIntegervFn(GLenum pname, GLint* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetIntegerv")
   gl_api_->glGetIntegervFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetIntegervRobustANGLEFn(GLenum pname,
                                             GLsizei bufSize,
                                             GLsizei* length,
@@ -6617,7 +6060,6 @@
   gl_api_->glGetIntegervRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetInternalformativFn(GLenum target,
                                          GLenum internalformat,
                                          GLenum pname,
@@ -6628,7 +6070,6 @@
                                    params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetInternalformativRobustANGLEFn(GLenum target,
                                                     GLenum internalformat,
                                                     GLenum pname,
@@ -6641,7 +6082,6 @@
                                               bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetMultisamplefvFn(GLenum pname,
                                       GLuint index,
                                       GLfloat* val) {
@@ -6649,7 +6089,6 @@
   gl_api_->glGetMultisamplefvFn(pname, index, val);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetMultisamplefvRobustANGLEFn(GLenum pname,
                                                  GLuint index,
                                                  GLsizei bufSize,
@@ -6660,7 +6099,6 @@
   gl_api_->glGetMultisamplefvRobustANGLEFn(pname, index, bufSize, length, val);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetnUniformfvRobustANGLEFn(GLuint program,
                                               GLint location,
                                               GLsizei bufSize,
@@ -6671,7 +6109,6 @@
                                         params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetnUniformivRobustANGLEFn(GLuint program,
                                               GLint location,
                                               GLsizei bufSize,
@@ -6682,7 +6119,6 @@
                                         params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetnUniformuivRobustANGLEFn(GLuint program,
                                                GLint location,
                                                GLsizei bufSize,
@@ -6694,7 +6130,6 @@
                                          params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetObjectLabelFn(GLenum identifier,
                                     GLuint name,
                                     GLsizei bufSize,
@@ -6704,7 +6139,6 @@
   gl_api_->glGetObjectLabelFn(identifier, name, bufSize, length, label);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetObjectPtrLabelFn(void* ptr,
                                        GLsizei bufSize,
                                        GLsizei* length,
@@ -6713,13 +6147,11 @@
   gl_api_->glGetObjectPtrLabelFn(ptr, bufSize, length, label);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetPointervFn(GLenum pname, void** params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetPointerv")
   gl_api_->glGetPointervFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetPointervRobustANGLERobustANGLEFn(GLenum pname,
                                                        GLsizei bufSize,
                                                        GLsizei* length,
@@ -6730,7 +6162,6 @@
                                                  params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetProgramBinaryFn(GLuint program,
                                       GLsizei bufSize,
                                       GLsizei* length,
@@ -6740,7 +6171,6 @@
   gl_api_->glGetProgramBinaryFn(program, bufSize, length, binaryFormat, binary);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetProgramInfoLogFn(GLuint program,
                                        GLsizei bufsize,
                                        GLsizei* length,
@@ -6749,7 +6179,6 @@
   gl_api_->glGetProgramInfoLogFn(program, bufsize, length, infolog);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetProgramInterfaceivFn(GLuint program,
                                            GLenum programInterface,
                                            GLenum pname,
@@ -6758,7 +6187,6 @@
   gl_api_->glGetProgramInterfaceivFn(program, programInterface, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetProgramInterfaceivRobustANGLEFn(GLuint program,
                                                       GLenum programInterface,
                                                       GLenum pname,
@@ -6771,13 +6199,11 @@
                                                 pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetProgramivFn(GLuint program, GLenum pname, GLint* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetProgramiv")
   gl_api_->glGetProgramivFn(program, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetProgramivRobustANGLEFn(GLuint program,
                                              GLenum pname,
                                              GLsizei bufSize,
@@ -6787,7 +6213,6 @@
   gl_api_->glGetProgramivRobustANGLEFn(program, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetProgramResourceivFn(GLuint program,
                                           GLenum programInterface,
                                           GLuint index,
@@ -6801,7 +6226,6 @@
                                     props, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 GLint TraceGLApi::glGetProgramResourceLocationFn(GLuint program,
                                                  GLenum programInterface,
                                                  const char* name) {
@@ -6811,7 +6235,6 @@
                                                  name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetProgramResourceNameFn(GLuint program,
                                             GLenum programInterface,
                                             GLuint index,
@@ -6823,13 +6246,11 @@
                                       length, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryivFn(GLenum target, GLenum pname, GLint* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetQueryiv")
   gl_api_->glGetQueryivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryivRobustANGLEFn(GLenum target,
                                            GLenum pname,
                                            GLsizei bufSize,
@@ -6839,7 +6260,6 @@
   gl_api_->glGetQueryivRobustANGLEFn(target, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryObjecti64vFn(GLuint id,
                                         GLenum pname,
                                         GLint64* params) {
@@ -6847,7 +6267,6 @@
   gl_api_->glGetQueryObjecti64vFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryObjecti64vRobustANGLEFn(GLuint id,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -6859,13 +6278,11 @@
                                              params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryObjectivFn(GLuint id, GLenum pname, GLint* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetQueryObjectiv")
   gl_api_->glGetQueryObjectivFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryObjectivRobustANGLEFn(GLuint id,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -6876,7 +6293,6 @@
   gl_api_->glGetQueryObjectivRobustANGLEFn(id, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryObjectui64vFn(GLuint id,
                                          GLenum pname,
                                          GLuint64* params) {
@@ -6884,7 +6300,6 @@
   gl_api_->glGetQueryObjectui64vFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryObjectui64vRobustANGLEFn(GLuint id,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -6896,7 +6311,6 @@
                                               params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryObjectuivFn(GLuint id,
                                        GLenum pname,
                                        GLuint* params) {
@@ -6904,7 +6318,6 @@
   gl_api_->glGetQueryObjectuivFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetQueryObjectuivRobustANGLEFn(GLuint id,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -6915,7 +6328,6 @@
   gl_api_->glGetQueryObjectuivRobustANGLEFn(id, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetRenderbufferParameterivEXTFn(GLenum target,
                                                    GLenum pname,
                                                    GLint* params) {
@@ -6924,7 +6336,6 @@
   gl_api_->glGetRenderbufferParameterivEXTFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetRenderbufferParameterivRobustANGLEFn(GLenum target,
                                                            GLenum pname,
                                                            GLsizei bufSize,
@@ -6936,7 +6347,6 @@
                                                      length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetSamplerParameterfvFn(GLuint sampler,
                                            GLenum pname,
                                            GLfloat* params) {
@@ -6944,7 +6354,6 @@
   gl_api_->glGetSamplerParameterfvFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetSamplerParameterfvRobustANGLEFn(GLuint sampler,
                                                       GLenum pname,
                                                       GLsizei bufSize,
@@ -6956,7 +6365,6 @@
                                                 params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetSamplerParameterIivRobustANGLEFn(GLuint sampler,
                                                        GLenum pname,
                                                        GLsizei bufSize,
@@ -6968,7 +6376,6 @@
                                                  length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetSamplerParameterIuivRobustANGLEFn(GLuint sampler,
                                                         GLenum pname,
                                                         GLsizei bufSize,
@@ -6980,7 +6387,6 @@
                                                   length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetSamplerParameterivFn(GLuint sampler,
                                            GLenum pname,
                                            GLint* params) {
@@ -6988,7 +6394,6 @@
   gl_api_->glGetSamplerParameterivFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetSamplerParameterivRobustANGLEFn(GLuint sampler,
                                                       GLenum pname,
                                                       GLsizei bufSize,
@@ -7000,7 +6405,6 @@
                                                 params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetShaderInfoLogFn(GLuint shader,
                                       GLsizei bufsize,
                                       GLsizei* length,
@@ -7009,13 +6413,11 @@
   gl_api_->glGetShaderInfoLogFn(shader, bufsize, length, infolog);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetShaderivFn(GLuint shader, GLenum pname, GLint* params) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetShaderiv")
   gl_api_->glGetShaderivFn(shader, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetShaderivRobustANGLEFn(GLuint shader,
                                             GLenum pname,
                                             GLsizei bufSize,
@@ -7025,7 +6427,6 @@
   gl_api_->glGetShaderivRobustANGLEFn(shader, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetShaderPrecisionFormatFn(GLenum shadertype,
                                               GLenum precisiontype,
                                               GLint* range,
@@ -7035,7 +6436,6 @@
                                         precision);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetShaderSourceFn(GLuint shader,
                                      GLsizei bufsize,
                                      GLsizei* length,
@@ -7044,19 +6444,16 @@
   gl_api_->glGetShaderSourceFn(shader, bufsize, length, source);
 }
 
-DISABLE_CFI_ICALL
 const GLubyte* TraceGLApi::glGetStringFn(GLenum name) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetString")
   return gl_api_->glGetStringFn(name);
 }
 
-DISABLE_CFI_ICALL
 const GLubyte* TraceGLApi::glGetStringiFn(GLenum name, GLuint index) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetStringi")
   return gl_api_->glGetStringiFn(name, index);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetSyncivFn(GLsync sync,
                                GLenum pname,
                                GLsizei bufSize,
@@ -7066,7 +6463,6 @@
   gl_api_->glGetSyncivFn(sync, pname, bufSize, length, values);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexLevelParameterfvFn(GLenum target,
                                             GLint level,
                                             GLenum pname,
@@ -7075,7 +6471,6 @@
   gl_api_->glGetTexLevelParameterfvFn(target, level, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexLevelParameterfvRobustANGLEFn(GLenum target,
                                                        GLint level,
                                                        GLenum pname,
@@ -7088,7 +6483,6 @@
                                                  length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexLevelParameterivFn(GLenum target,
                                             GLint level,
                                             GLenum pname,
@@ -7097,7 +6491,6 @@
   gl_api_->glGetTexLevelParameterivFn(target, level, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexLevelParameterivRobustANGLEFn(GLenum target,
                                                        GLint level,
                                                        GLenum pname,
@@ -7110,7 +6503,6 @@
                                                  length, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexParameterfvFn(GLenum target,
                                        GLenum pname,
                                        GLfloat* params) {
@@ -7118,7 +6510,6 @@
   gl_api_->glGetTexParameterfvFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexParameterfvRobustANGLEFn(GLenum target,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -7130,7 +6521,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexParameterIivRobustANGLEFn(GLenum target,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -7142,7 +6532,6 @@
                                              params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexParameterIuivRobustANGLEFn(GLenum target,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -7154,7 +6543,6 @@
                                               params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexParameterivFn(GLenum target,
                                        GLenum pname,
                                        GLint* params) {
@@ -7162,7 +6550,6 @@
   gl_api_->glGetTexParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTexParameterivRobustANGLEFn(GLenum target,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -7174,7 +6561,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTransformFeedbackVaryingFn(GLuint program,
                                                  GLuint index,
                                                  GLsizei bufSize,
@@ -7188,7 +6574,6 @@
                                            size, type, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetTranslatedShaderSourceANGLEFn(GLuint shader,
                                                     GLsizei bufsize,
                                                     GLsizei* length,
@@ -7198,14 +6583,12 @@
   gl_api_->glGetTranslatedShaderSourceANGLEFn(shader, bufsize, length, source);
 }
 
-DISABLE_CFI_ICALL
 GLuint TraceGLApi::glGetUniformBlockIndexFn(GLuint program,
                                             const char* uniformBlockName) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetUniformBlockIndex")
   return gl_api_->glGetUniformBlockIndexFn(program, uniformBlockName);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetUniformfvFn(GLuint program,
                                   GLint location,
                                   GLfloat* params) {
@@ -7213,7 +6596,6 @@
   gl_api_->glGetUniformfvFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetUniformfvRobustANGLEFn(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
@@ -7224,7 +6606,6 @@
                                        params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetUniformIndicesFn(GLuint program,
                                        GLsizei uniformCount,
                                        const char* const* uniformNames,
@@ -7234,7 +6615,6 @@
                                  uniformIndices);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetUniformivFn(GLuint program,
                                   GLint location,
                                   GLint* params) {
@@ -7242,7 +6622,6 @@
   gl_api_->glGetUniformivFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetUniformivRobustANGLEFn(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
@@ -7253,13 +6632,11 @@
                                        params);
 }
 
-DISABLE_CFI_ICALL
 GLint TraceGLApi::glGetUniformLocationFn(GLuint program, const char* name) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetUniformLocation")
   return gl_api_->glGetUniformLocationFn(program, name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetUniformuivFn(GLuint program,
                                    GLint location,
                                    GLuint* params) {
@@ -7267,7 +6644,6 @@
   gl_api_->glGetUniformuivFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetUniformuivRobustANGLEFn(GLuint program,
                                               GLint location,
                                               GLsizei bufSize,
@@ -7278,7 +6654,6 @@
                                         params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetVertexAttribfvFn(GLuint index,
                                        GLenum pname,
                                        GLfloat* params) {
@@ -7286,7 +6661,6 @@
   gl_api_->glGetVertexAttribfvFn(index, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetVertexAttribfvRobustANGLEFn(GLuint index,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -7298,7 +6672,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetVertexAttribIivRobustANGLEFn(GLuint index,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -7310,7 +6683,6 @@
                                              params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetVertexAttribIuivRobustANGLEFn(GLuint index,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -7322,7 +6694,6 @@
                                               params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetVertexAttribivFn(GLuint index,
                                        GLenum pname,
                                        GLint* params) {
@@ -7330,7 +6701,6 @@
   gl_api_->glGetVertexAttribivFn(index, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetVertexAttribivRobustANGLEFn(GLuint index,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -7342,7 +6712,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetVertexAttribPointervFn(GLuint index,
                                              GLenum pname,
                                              void** pointer) {
@@ -7350,7 +6719,6 @@
   gl_api_->glGetVertexAttribPointervFn(index, pname, pointer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glGetVertexAttribPointervRobustANGLEFn(GLuint index,
                                                         GLenum pname,
                                                         GLsizei bufSize,
@@ -7362,19 +6730,16 @@
                                                   pointer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glHintFn(GLenum target, GLenum mode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glHint")
   gl_api_->glHintFn(target, mode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glInsertEventMarkerEXTFn(GLsizei length, const char* marker) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glInsertEventMarkerEXT")
   gl_api_->glInsertEventMarkerEXTFn(length, marker);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glInvalidateFramebufferFn(GLenum target,
                                            GLsizei numAttachments,
                                            const GLenum* attachments) {
@@ -7382,7 +6747,6 @@
   gl_api_->glInvalidateFramebufferFn(target, numAttachments, attachments);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glInvalidateSubFramebufferFn(GLenum target,
                                               GLsizei numAttachments,
                                               const GLenum* attachments,
@@ -7395,115 +6759,96 @@
                                         y, width, height);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsBufferFn(GLuint buffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsBuffer")
   return gl_api_->glIsBufferFn(buffer);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsEnabledFn(GLenum cap) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsEnabled")
   return gl_api_->glIsEnabledFn(cap);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsFenceAPPLEFn(GLuint fence) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsFenceAPPLE")
   return gl_api_->glIsFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsFenceNVFn(GLuint fence) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsFenceNV")
   return gl_api_->glIsFenceNVFn(fence);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsFramebufferEXTFn(GLuint framebuffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsFramebufferEXT")
   return gl_api_->glIsFramebufferEXTFn(framebuffer);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsPathNVFn(GLuint path) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsPathNV")
   return gl_api_->glIsPathNVFn(path);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsProgramFn(GLuint program) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsProgram")
   return gl_api_->glIsProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsQueryFn(GLuint query) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsQuery")
   return gl_api_->glIsQueryFn(query);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsRenderbufferEXTFn(GLuint renderbuffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsRenderbufferEXT")
   return gl_api_->glIsRenderbufferEXTFn(renderbuffer);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsSamplerFn(GLuint sampler) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsSampler")
   return gl_api_->glIsSamplerFn(sampler);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsShaderFn(GLuint shader) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsShader")
   return gl_api_->glIsShaderFn(shader);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsSyncFn(GLsync sync) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsSync")
   return gl_api_->glIsSyncFn(sync);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsTextureFn(GLuint texture) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsTexture")
   return gl_api_->glIsTextureFn(texture);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsTransformFeedbackFn(GLuint id) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsTransformFeedback")
   return gl_api_->glIsTransformFeedbackFn(id);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glIsVertexArrayOESFn(GLuint array) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glIsVertexArrayOES")
   return gl_api_->glIsVertexArrayOESFn(array);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glLineWidthFn(GLfloat width) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glLineWidth")
   gl_api_->glLineWidthFn(width);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glLinkProgramFn(GLuint program) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glLinkProgram")
   gl_api_->glLinkProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void* TraceGLApi::glMapBufferFn(GLenum target, GLenum access) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glMapBuffer")
   return gl_api_->glMapBufferFn(target, access);
 }
 
-DISABLE_CFI_ICALL
 void* TraceGLApi::glMapBufferRangeFn(GLenum target,
                                      GLintptr offset,
                                      GLsizeiptr length,
@@ -7512,25 +6857,21 @@
   return gl_api_->glMapBufferRangeFn(target, offset, length, access);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glMatrixLoadfEXTFn(GLenum matrixMode, const GLfloat* m) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glMatrixLoadfEXT")
   gl_api_->glMatrixLoadfEXTFn(matrixMode, m);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glMatrixLoadIdentityEXTFn(GLenum matrixMode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glMatrixLoadIdentityEXT")
   gl_api_->glMatrixLoadIdentityEXTFn(matrixMode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glMemoryBarrierEXTFn(GLbitfield barriers) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glMemoryBarrierEXT")
   gl_api_->glMemoryBarrierEXTFn(barriers);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glObjectLabelFn(GLenum identifier,
                                  GLuint name,
                                  GLsizei length,
@@ -7539,7 +6880,6 @@
   gl_api_->glObjectLabelFn(identifier, name, length, label);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glObjectPtrLabelFn(void* ptr,
                                     GLsizei length,
                                     const char* label) {
@@ -7547,7 +6887,6 @@
   gl_api_->glObjectPtrLabelFn(ptr, length, label);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPathCommandsNVFn(GLuint path,
                                     GLsizei numCommands,
                                     const GLubyte* commands,
@@ -7559,7 +6898,6 @@
                               coords);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPathParameterfNVFn(GLuint path,
                                       GLenum pname,
                                       GLfloat value) {
@@ -7567,67 +6905,56 @@
   gl_api_->glPathParameterfNVFn(path, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPathParameteriNVFn(GLuint path, GLenum pname, GLint value) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPathParameteriNV")
   gl_api_->glPathParameteriNVFn(path, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPathStencilFuncNVFn(GLenum func, GLint ref, GLuint mask) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPathStencilFuncNV")
   gl_api_->glPathStencilFuncNVFn(func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPauseTransformFeedbackFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPauseTransformFeedback")
   gl_api_->glPauseTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPixelStoreiFn(GLenum pname, GLint param) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPixelStorei")
   gl_api_->glPixelStoreiFn(pname, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPointParameteriFn(GLenum pname, GLint param) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPointParameteri")
   gl_api_->glPointParameteriFn(pname, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPolygonModeFn(GLenum face, GLenum mode) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPolygonMode")
   gl_api_->glPolygonModeFn(face, mode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPolygonOffsetFn(GLfloat factor, GLfloat units) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPolygonOffset")
   gl_api_->glPolygonOffsetFn(factor, units);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPopDebugGroupFn() {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPopDebugGroup")
   gl_api_->glPopDebugGroupFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPopGroupMarkerEXTFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPopGroupMarkerEXT")
   gl_api_->glPopGroupMarkerEXTFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPrimitiveRestartIndexFn(GLuint index) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPrimitiveRestartIndex")
   gl_api_->glPrimitiveRestartIndexFn(index);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glProgramBinaryFn(GLuint program,
                                    GLenum binaryFormat,
                                    const GLvoid* binary,
@@ -7636,7 +6963,6 @@
   gl_api_->glProgramBinaryFn(program, binaryFormat, binary, length);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glProgramParameteriFn(GLuint program,
                                        GLenum pname,
                                        GLint value) {
@@ -7644,7 +6970,6 @@
   gl_api_->glProgramParameteriFn(program, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glProgramPathFragmentInputGenNVFn(GLuint program,
                                                    GLint location,
                                                    GLenum genMode,
@@ -7656,7 +6981,6 @@
                                              components, coeffs);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPushDebugGroupFn(GLenum source,
                                     GLuint id,
                                     GLsizei length,
@@ -7665,25 +6989,21 @@
   gl_api_->glPushDebugGroupFn(source, id, length, message);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glPushGroupMarkerEXTFn(GLsizei length, const char* marker) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glPushGroupMarkerEXT")
   gl_api_->glPushGroupMarkerEXTFn(length, marker);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glQueryCounterFn(GLuint id, GLenum target) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glQueryCounter")
   gl_api_->glQueryCounterFn(id, target);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glReadBufferFn(GLenum src) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glReadBuffer")
   gl_api_->glReadBufferFn(src);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glReadnPixelsRobustANGLEFn(GLint x,
                                             GLint y,
                                             GLsizei width,
@@ -7700,7 +7020,6 @@
                                       bufSize, length, columns, rows, data);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glReadPixelsFn(GLint x,
                                 GLint y,
                                 GLsizei width,
@@ -7712,7 +7031,6 @@
   gl_api_->glReadPixelsFn(x, y, width, height, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glReadPixelsRobustANGLEFn(GLint x,
                                            GLint y,
                                            GLsizei width,
@@ -7729,13 +7047,11 @@
                                      length, columns, rows, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glReleaseShaderCompilerFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glReleaseShaderCompiler")
   gl_api_->glReleaseShaderCompilerFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glRenderbufferStorageEXTFn(GLenum target,
                                             GLenum internalformat,
                                             GLsizei width,
@@ -7744,7 +7060,6 @@
   gl_api_->glRenderbufferStorageEXTFn(target, internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glRenderbufferStorageMultisampleFn(GLenum target,
                                                     GLsizei samples,
                                                     GLenum internalformat,
@@ -7756,7 +7071,6 @@
                                               width, height);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glRenderbufferStorageMultisampleEXTFn(GLenum target,
                                                        GLsizei samples,
                                                        GLenum internalformat,
@@ -7768,25 +7082,21 @@
                                                  internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glRequestExtensionANGLEFn(const char* name) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glRequestExtensionANGLE")
   gl_api_->glRequestExtensionANGLEFn(name);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glResumeTransformFeedbackFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glResumeTransformFeedback")
   gl_api_->glResumeTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSampleCoverageFn(GLclampf value, GLboolean invert) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glSampleCoverage")
   gl_api_->glSampleCoverageFn(value, invert);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSamplerParameterfFn(GLuint sampler,
                                        GLenum pname,
                                        GLfloat param) {
@@ -7794,7 +7104,6 @@
   gl_api_->glSamplerParameterfFn(sampler, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSamplerParameterfvFn(GLuint sampler,
                                         GLenum pname,
                                         const GLfloat* params) {
@@ -7802,7 +7111,6 @@
   gl_api_->glSamplerParameterfvFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSamplerParameterfvRobustANGLEFn(GLuint sampler,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -7812,7 +7120,6 @@
   gl_api_->glSamplerParameterfvRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSamplerParameteriFn(GLuint sampler,
                                        GLenum pname,
                                        GLint param) {
@@ -7820,7 +7127,6 @@
   gl_api_->glSamplerParameteriFn(sampler, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSamplerParameterIivRobustANGLEFn(GLuint sampler,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -7830,7 +7136,6 @@
   gl_api_->glSamplerParameterIivRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSamplerParameterIuivRobustANGLEFn(GLuint sampler,
                                                      GLenum pname,
                                                      GLsizei bufSize,
@@ -7840,7 +7145,6 @@
   gl_api_->glSamplerParameterIuivRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSamplerParameterivFn(GLuint sampler,
                                         GLenum pname,
                                         const GLint* params) {
@@ -7848,7 +7152,6 @@
   gl_api_->glSamplerParameterivFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSamplerParameterivRobustANGLEFn(GLuint sampler,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -7858,25 +7161,21 @@
   gl_api_->glSamplerParameterivRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glScissorFn(GLint x, GLint y, GLsizei width, GLsizei height) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glScissor")
   gl_api_->glScissorFn(x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSetFenceAPPLEFn(GLuint fence) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glSetFenceAPPLE")
   gl_api_->glSetFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glSetFenceNVFn(GLuint fence, GLenum condition) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glSetFenceNV")
   gl_api_->glSetFenceNVFn(fence, condition);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glShaderBinaryFn(GLsizei n,
                                   const GLuint* shaders,
                                   GLenum binaryformat,
@@ -7886,7 +7185,6 @@
   gl_api_->glShaderBinaryFn(n, shaders, binaryformat, binary, length);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glShaderSourceFn(GLuint shader,
                                   GLsizei count,
                                   const char* const* str,
@@ -7895,7 +7193,6 @@
   gl_api_->glShaderSourceFn(shader, count, str, length);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilFillPathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -7912,7 +7209,6 @@
                                           transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilFillPathNVFn(GLuint path,
                                        GLenum fillMode,
                                        GLuint mask) {
@@ -7920,13 +7216,11 @@
   gl_api_->glStencilFillPathNVFn(path, fillMode, mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilFuncFn(GLenum func, GLint ref, GLuint mask) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glStencilFunc")
   gl_api_->glStencilFuncFn(func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilFuncSeparateFn(GLenum face,
                                          GLenum func,
                                          GLint ref,
@@ -7935,25 +7229,21 @@
   gl_api_->glStencilFuncSeparateFn(face, func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilMaskFn(GLuint mask) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glStencilMask")
   gl_api_->glStencilMaskFn(mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilMaskSeparateFn(GLenum face, GLuint mask) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glStencilMaskSeparate")
   gl_api_->glStencilMaskSeparateFn(face, mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilOpFn(GLenum fail, GLenum zfail, GLenum zpass) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glStencilOp")
   gl_api_->glStencilOpFn(fail, zfail, zpass);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilOpSeparateFn(GLenum face,
                                        GLenum fail,
                                        GLenum zfail,
@@ -7962,7 +7252,6 @@
   gl_api_->glStencilOpSeparateFn(face, fail, zfail, zpass);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilStrokePathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -7979,7 +7268,6 @@
                                             transformValues);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilStrokePathNVFn(GLuint path,
                                          GLint reference,
                                          GLuint mask) {
@@ -7987,7 +7275,6 @@
   gl_api_->glStencilStrokePathNVFn(path, reference, mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilThenCoverFillPathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -8005,7 +7292,6 @@
       transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilThenCoverFillPathNVFn(GLuint path,
                                                 GLenum fillMode,
                                                 GLuint mask,
@@ -8015,7 +7301,6 @@
   gl_api_->glStencilThenCoverFillPathNVFn(path, fillMode, mask, coverMode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilThenCoverStrokePathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -8033,7 +7318,6 @@
       transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glStencilThenCoverStrokePathNVFn(GLuint path,
                                                   GLint reference,
                                                   GLuint mask,
@@ -8043,19 +7327,16 @@
   gl_api_->glStencilThenCoverStrokePathNVFn(path, reference, mask, coverMode);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glTestFenceAPPLEFn(GLuint fence) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glTestFenceAPPLE")
   return gl_api_->glTestFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glTestFenceNVFn(GLuint fence) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glTestFenceNV")
   return gl_api_->glTestFenceNVFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexBufferFn(GLenum target,
                                GLenum internalformat,
                                GLuint buffer) {
@@ -8063,7 +7344,6 @@
   gl_api_->glTexBufferFn(target, internalformat, buffer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexBufferRangeFn(GLenum target,
                                     GLenum internalformat,
                                     GLuint buffer,
@@ -8073,7 +7353,6 @@
   gl_api_->glTexBufferRangeFn(target, internalformat, buffer, offset, size);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexImage2DFn(GLenum target,
                                 GLint level,
                                 GLint internalformat,
@@ -8088,7 +7367,6 @@
                           format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexImage2DRobustANGLEFn(GLenum target,
                                            GLint level,
                                            GLint internalformat,
@@ -8105,7 +7383,6 @@
                                      pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexImage3DFn(GLenum target,
                                 GLint level,
                                 GLint internalformat,
@@ -8121,7 +7398,6 @@
                           border, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexImage3DRobustANGLEFn(GLenum target,
                                            GLint level,
                                            GLint internalformat,
@@ -8139,13 +7415,11 @@
                                      bufSize, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexParameterfFn(GLenum target, GLenum pname, GLfloat param) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glTexParameterf")
   gl_api_->glTexParameterfFn(target, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexParameterfvFn(GLenum target,
                                     GLenum pname,
                                     const GLfloat* params) {
@@ -8153,7 +7427,6 @@
   gl_api_->glTexParameterfvFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexParameterfvRobustANGLEFn(GLenum target,
                                                GLenum pname,
                                                GLsizei bufSize,
@@ -8163,13 +7436,11 @@
   gl_api_->glTexParameterfvRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexParameteriFn(GLenum target, GLenum pname, GLint param) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glTexParameteri")
   gl_api_->glTexParameteriFn(target, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexParameterIivRobustANGLEFn(GLenum target,
                                                 GLenum pname,
                                                 GLsizei bufSize,
@@ -8179,7 +7450,6 @@
   gl_api_->glTexParameterIivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexParameterIuivRobustANGLEFn(GLenum target,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -8189,7 +7459,6 @@
   gl_api_->glTexParameterIuivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexParameterivFn(GLenum target,
                                     GLenum pname,
                                     const GLint* params) {
@@ -8197,7 +7466,6 @@
   gl_api_->glTexParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexParameterivRobustANGLEFn(GLenum target,
                                                GLenum pname,
                                                GLsizei bufSize,
@@ -8207,7 +7475,6 @@
   gl_api_->glTexParameterivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexStorage2DEXTFn(GLenum target,
                                      GLsizei levels,
                                      GLenum internalformat,
@@ -8217,7 +7484,6 @@
   gl_api_->glTexStorage2DEXTFn(target, levels, internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexStorage3DFn(GLenum target,
                                   GLsizei levels,
                                   GLenum internalformat,
@@ -8229,7 +7495,6 @@
                             depth);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexSubImage2DFn(GLenum target,
                                    GLint level,
                                    GLint xoffset,
@@ -8244,7 +7509,6 @@
                              format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexSubImage2DRobustANGLEFn(GLenum target,
                                               GLint level,
                                               GLint xoffset,
@@ -8260,7 +7524,6 @@
                                         height, format, type, bufSize, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexSubImage3DFn(GLenum target,
                                    GLint level,
                                    GLint xoffset,
@@ -8277,7 +7540,6 @@
                              height, depth, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTexSubImage3DRobustANGLEFn(GLenum target,
                                               GLint level,
                                               GLint xoffset,
@@ -8296,7 +7558,6 @@
                                         type, bufSize, pixels);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glTransformFeedbackVaryingsFn(GLuint program,
                                                GLsizei count,
                                                const char* const* varyings,
@@ -8306,13 +7567,11 @@
   gl_api_->glTransformFeedbackVaryingsFn(program, count, varyings, bufferMode);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform1fFn(GLint location, GLfloat x) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform1f")
   gl_api_->glUniform1fFn(location, x);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform1fvFn(GLint location,
                                 GLsizei count,
                                 const GLfloat* v) {
@@ -8320,25 +7579,21 @@
   gl_api_->glUniform1fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform1iFn(GLint location, GLint x) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform1i")
   gl_api_->glUniform1iFn(location, x);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform1ivFn(GLint location, GLsizei count, const GLint* v) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform1iv")
   gl_api_->glUniform1ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform1uiFn(GLint location, GLuint v0) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform1ui")
   gl_api_->glUniform1uiFn(location, v0);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform1uivFn(GLint location,
                                  GLsizei count,
                                  const GLuint* v) {
@@ -8346,13 +7601,11 @@
   gl_api_->glUniform1uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform2fFn(GLint location, GLfloat x, GLfloat y) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform2f")
   gl_api_->glUniform2fFn(location, x, y);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform2fvFn(GLint location,
                                 GLsizei count,
                                 const GLfloat* v) {
@@ -8360,25 +7613,21 @@
   gl_api_->glUniform2fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform2iFn(GLint location, GLint x, GLint y) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform2i")
   gl_api_->glUniform2iFn(location, x, y);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform2ivFn(GLint location, GLsizei count, const GLint* v) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform2iv")
   gl_api_->glUniform2ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform2uiFn(GLint location, GLuint v0, GLuint v1) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform2ui")
   gl_api_->glUniform2uiFn(location, v0, v1);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform2uivFn(GLint location,
                                  GLsizei count,
                                  const GLuint* v) {
@@ -8386,7 +7635,6 @@
   gl_api_->glUniform2uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform3fFn(GLint location,
                                GLfloat x,
                                GLfloat y,
@@ -8395,7 +7643,6 @@
   gl_api_->glUniform3fFn(location, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform3fvFn(GLint location,
                                 GLsizei count,
                                 const GLfloat* v) {
@@ -8403,19 +7650,16 @@
   gl_api_->glUniform3fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform3iFn(GLint location, GLint x, GLint y, GLint z) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform3i")
   gl_api_->glUniform3iFn(location, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform3ivFn(GLint location, GLsizei count, const GLint* v) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform3iv")
   gl_api_->glUniform3ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform3uiFn(GLint location,
                                 GLuint v0,
                                 GLuint v1,
@@ -8424,7 +7668,6 @@
   gl_api_->glUniform3uiFn(location, v0, v1, v2);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform3uivFn(GLint location,
                                  GLsizei count,
                                  const GLuint* v) {
@@ -8432,7 +7675,6 @@
   gl_api_->glUniform3uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform4fFn(GLint location,
                                GLfloat x,
                                GLfloat y,
@@ -8442,7 +7684,6 @@
   gl_api_->glUniform4fFn(location, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform4fvFn(GLint location,
                                 GLsizei count,
                                 const GLfloat* v) {
@@ -8450,7 +7691,6 @@
   gl_api_->glUniform4fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform4iFn(GLint location,
                                GLint x,
                                GLint y,
@@ -8460,13 +7700,11 @@
   gl_api_->glUniform4iFn(location, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform4ivFn(GLint location, GLsizei count, const GLint* v) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUniform4iv")
   gl_api_->glUniform4ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform4uiFn(GLint location,
                                 GLuint v0,
                                 GLuint v1,
@@ -8476,7 +7714,6 @@
   gl_api_->glUniform4uiFn(location, v0, v1, v2, v3);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniform4uivFn(GLint location,
                                  GLsizei count,
                                  const GLuint* v) {
@@ -8484,7 +7721,6 @@
   gl_api_->glUniform4uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformBlockBindingFn(GLuint program,
                                          GLuint uniformBlockIndex,
                                          GLuint uniformBlockBinding) {
@@ -8493,7 +7729,6 @@
                                    uniformBlockBinding);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix2fvFn(GLint location,
                                       GLsizei count,
                                       GLboolean transpose,
@@ -8502,7 +7737,6 @@
   gl_api_->glUniformMatrix2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix2x3fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -8511,7 +7745,6 @@
   gl_api_->glUniformMatrix2x3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix2x4fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -8520,7 +7753,6 @@
   gl_api_->glUniformMatrix2x4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix3fvFn(GLint location,
                                       GLsizei count,
                                       GLboolean transpose,
@@ -8529,7 +7761,6 @@
   gl_api_->glUniformMatrix3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix3x2fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -8538,7 +7769,6 @@
   gl_api_->glUniformMatrix3x2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix3x4fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -8547,7 +7777,6 @@
   gl_api_->glUniformMatrix3x4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix4fvFn(GLint location,
                                       GLsizei count,
                                       GLboolean transpose,
@@ -8556,7 +7785,6 @@
   gl_api_->glUniformMatrix4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix4x2fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -8565,7 +7793,6 @@
   gl_api_->glUniformMatrix4x2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUniformMatrix4x3fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -8574,49 +7801,41 @@
   gl_api_->glUniformMatrix4x3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceGLApi::glUnmapBufferFn(GLenum target) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUnmapBuffer")
   return gl_api_->glUnmapBufferFn(target);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glUseProgramFn(GLuint program) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glUseProgram")
   gl_api_->glUseProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glValidateProgramFn(GLuint program) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glValidateProgram")
   gl_api_->glValidateProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttrib1fFn(GLuint indx, GLfloat x) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttrib1f")
   gl_api_->glVertexAttrib1fFn(indx, x);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttrib1fvFn(GLuint indx, const GLfloat* values) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttrib1fv")
   gl_api_->glVertexAttrib1fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttrib2fFn(GLuint indx, GLfloat x, GLfloat y) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttrib2f")
   gl_api_->glVertexAttrib2fFn(indx, x, y);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttrib2fvFn(GLuint indx, const GLfloat* values) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttrib2fv")
   gl_api_->glVertexAttrib2fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttrib3fFn(GLuint indx,
                                     GLfloat x,
                                     GLfloat y,
@@ -8625,13 +7844,11 @@
   gl_api_->glVertexAttrib3fFn(indx, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttrib3fvFn(GLuint indx, const GLfloat* values) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttrib3fv")
   gl_api_->glVertexAttrib3fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttrib4fFn(GLuint indx,
                                     GLfloat x,
                                     GLfloat y,
@@ -8641,19 +7858,16 @@
   gl_api_->glVertexAttrib4fFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttrib4fvFn(GLuint indx, const GLfloat* values) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttrib4fv")
   gl_api_->glVertexAttrib4fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttribDivisorANGLEFn(GLuint index, GLuint divisor) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttribDivisorANGLE")
   gl_api_->glVertexAttribDivisorANGLEFn(index, divisor);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttribI4iFn(GLuint indx,
                                      GLint x,
                                      GLint y,
@@ -8663,13 +7877,11 @@
   gl_api_->glVertexAttribI4iFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttribI4ivFn(GLuint indx, const GLint* values) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttribI4iv")
   gl_api_->glVertexAttribI4ivFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttribI4uiFn(GLuint indx,
                                       GLuint x,
                                       GLuint y,
@@ -8679,13 +7891,11 @@
   gl_api_->glVertexAttribI4uiFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttribI4uivFn(GLuint indx, const GLuint* values) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glVertexAttribI4uiv")
   gl_api_->glVertexAttribI4uivFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttribIPointerFn(GLuint indx,
                                           GLint size,
                                           GLenum type,
@@ -8695,7 +7905,6 @@
   gl_api_->glVertexAttribIPointerFn(indx, size, type, stride, ptr);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glVertexAttribPointerFn(GLuint indx,
                                          GLint size,
                                          GLenum type,
@@ -8706,19 +7915,16 @@
   gl_api_->glVertexAttribPointerFn(indx, size, type, normalized, stride, ptr);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glViewportFn(GLint x, GLint y, GLsizei width, GLsizei height) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glViewport")
   gl_api_->glViewportFn(x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glWaitSync")
   gl_api_->glWaitSyncFn(sync, flags, timeout);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLApi::glWindowRectanglesEXTFn(GLenum mode,
                                          GLsizei n,
                                          const GLint* box) {
@@ -8726,14 +7932,12 @@
   gl_api_->glWindowRectanglesEXTFn(mode, n, box);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glActiveTextureFn(GLenum texture) {
   GL_SERVICE_LOG("glActiveTexture"
                  << "(" << GLEnums::GetStringEnum(texture) << ")");
   gl_api_->glActiveTextureFn(texture);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glApplyFramebufferAttachmentCMAAINTELFn(void) {
   GL_SERVICE_LOG("glApplyFramebufferAttachmentCMAAINTEL"
                  << "("
@@ -8741,28 +7945,24 @@
   gl_api_->glApplyFramebufferAttachmentCMAAINTELFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glAttachShaderFn(GLuint program, GLuint shader) {
   GL_SERVICE_LOG("glAttachShader"
                  << "(" << program << ", " << shader << ")");
   gl_api_->glAttachShaderFn(program, shader);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBeginQueryFn(GLenum target, GLuint id) {
   GL_SERVICE_LOG("glBeginQuery"
                  << "(" << GLEnums::GetStringEnum(target) << ", " << id << ")");
   gl_api_->glBeginQueryFn(target, id);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBeginTransformFeedbackFn(GLenum primitiveMode) {
   GL_SERVICE_LOG("glBeginTransformFeedback"
                  << "(" << GLEnums::GetStringEnum(primitiveMode) << ")");
   gl_api_->glBeginTransformFeedbackFn(primitiveMode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindAttribLocationFn(GLuint program,
                                         GLuint index,
                                         const char* name) {
@@ -8771,7 +7971,6 @@
   gl_api_->glBindAttribLocationFn(program, index, name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindBufferFn(GLenum target, GLuint buffer) {
   GL_SERVICE_LOG("glBindBuffer"
                  << "(" << GLEnums::GetStringEnum(target) << ", " << buffer
@@ -8779,7 +7978,6 @@
   gl_api_->glBindBufferFn(target, buffer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindBufferBaseFn(GLenum target,
                                     GLuint index,
                                     GLuint buffer) {
@@ -8789,7 +7987,6 @@
   gl_api_->glBindBufferBaseFn(target, index, buffer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindBufferRangeFn(GLenum target,
                                      GLuint index,
                                      GLuint buffer,
@@ -8801,7 +7998,6 @@
   gl_api_->glBindBufferRangeFn(target, index, buffer, offset, size);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindFragDataLocationFn(GLuint program,
                                           GLuint colorNumber,
                                           const char* name) {
@@ -8811,7 +8007,6 @@
   gl_api_->glBindFragDataLocationFn(program, colorNumber, name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindFragDataLocationIndexedFn(GLuint program,
                                                  GLuint colorNumber,
                                                  GLuint index,
@@ -8822,7 +8017,6 @@
   gl_api_->glBindFragDataLocationIndexedFn(program, colorNumber, index, name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindFramebufferEXTFn(GLenum target, GLuint framebuffer) {
   GL_SERVICE_LOG("glBindFramebufferEXT"
                  << "(" << GLEnums::GetStringEnum(target) << ", " << framebuffer
@@ -8830,7 +8024,6 @@
   gl_api_->glBindFramebufferEXTFn(target, framebuffer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindImageTextureEXTFn(GLuint index,
                                          GLuint texture,
                                          GLint level,
@@ -8846,7 +8039,6 @@
                                    access, format);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindRenderbufferEXTFn(GLenum target, GLuint renderbuffer) {
   GL_SERVICE_LOG("glBindRenderbufferEXT"
                  << "(" << GLEnums::GetStringEnum(target) << ", "
@@ -8854,14 +8046,12 @@
   gl_api_->glBindRenderbufferEXTFn(target, renderbuffer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindSamplerFn(GLuint unit, GLuint sampler) {
   GL_SERVICE_LOG("glBindSampler"
                  << "(" << unit << ", " << sampler << ")");
   gl_api_->glBindSamplerFn(unit, sampler);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindTextureFn(GLenum target, GLuint texture) {
   GL_SERVICE_LOG("glBindTexture"
                  << "(" << GLEnums::GetStringEnum(target) << ", " << texture
@@ -8869,14 +8059,12 @@
   gl_api_->glBindTextureFn(target, texture);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindTransformFeedbackFn(GLenum target, GLuint id) {
   GL_SERVICE_LOG("glBindTransformFeedback"
                  << "(" << GLEnums::GetStringEnum(target) << ", " << id << ")");
   gl_api_->glBindTransformFeedbackFn(target, id);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindUniformLocationCHROMIUMFn(GLuint program,
                                                  GLint location,
                                                  const char* name) {
@@ -8885,14 +8073,12 @@
   gl_api_->glBindUniformLocationCHROMIUMFn(program, location, name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBindVertexArrayOESFn(GLuint array) {
   GL_SERVICE_LOG("glBindVertexArrayOES"
                  << "(" << array << ")");
   gl_api_->glBindVertexArrayOESFn(array);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBlendBarrierKHRFn(void) {
   GL_SERVICE_LOG("glBlendBarrierKHR"
                  << "("
@@ -8900,7 +8086,6 @@
   gl_api_->glBlendBarrierKHRFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBlendColorFn(GLclampf red,
                                 GLclampf green,
                                 GLclampf blue,
@@ -8911,14 +8096,12 @@
   gl_api_->glBlendColorFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBlendEquationFn(GLenum mode) {
   GL_SERVICE_LOG("glBlendEquation"
                  << "(" << GLEnums::GetStringEnum(mode) << ")");
   gl_api_->glBlendEquationFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBlendEquationSeparateFn(GLenum modeRGB, GLenum modeAlpha) {
   GL_SERVICE_LOG("glBlendEquationSeparate"
                  << "(" << GLEnums::GetStringEnum(modeRGB) << ", "
@@ -8926,7 +8109,6 @@
   gl_api_->glBlendEquationSeparateFn(modeRGB, modeAlpha);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBlendFuncFn(GLenum sfactor, GLenum dfactor) {
   GL_SERVICE_LOG("glBlendFunc"
                  << "(" << GLEnums::GetStringEnum(sfactor) << ", "
@@ -8934,7 +8116,6 @@
   gl_api_->glBlendFuncFn(sfactor, dfactor);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBlendFuncSeparateFn(GLenum srcRGB,
                                        GLenum dstRGB,
                                        GLenum srcAlpha,
@@ -8947,7 +8128,6 @@
   gl_api_->glBlendFuncSeparateFn(srcRGB, dstRGB, srcAlpha, dstAlpha);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBlitFramebufferFn(GLint srcX0,
                                      GLint srcY0,
                                      GLint srcX1,
@@ -8967,7 +8147,6 @@
                                dstY1, mask, filter);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBufferDataFn(GLenum target,
                                 GLsizeiptr size,
                                 const void* data,
@@ -8979,7 +8158,6 @@
   gl_api_->glBufferDataFn(target, size, data, usage);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glBufferSubDataFn(GLenum target,
                                    GLintptr offset,
                                    GLsizeiptr size,
@@ -8991,7 +8169,6 @@
   gl_api_->glBufferSubDataFn(target, offset, size, data);
 }
 
-DISABLE_CFI_ICALL
 GLenum DebugGLApi::glCheckFramebufferStatusEXTFn(GLenum target) {
   GL_SERVICE_LOG("glCheckFramebufferStatusEXT"
                  << "(" << GLEnums::GetStringEnum(target) << ")");
@@ -9002,14 +8179,12 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearFn(GLbitfield mask) {
   GL_SERVICE_LOG("glClear"
                  << "(" << mask << ")");
   gl_api_->glClearFn(mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearBufferfiFn(GLenum buffer,
                                    GLint drawbuffer,
                                    const GLfloat depth,
@@ -9020,7 +8195,6 @@
   gl_api_->glClearBufferfiFn(buffer, drawbuffer, depth, stencil);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearBufferfvFn(GLenum buffer,
                                    GLint drawbuffer,
                                    const GLfloat* value) {
@@ -9030,7 +8204,6 @@
   gl_api_->glClearBufferfvFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearBufferivFn(GLenum buffer,
                                    GLint drawbuffer,
                                    const GLint* value) {
@@ -9040,7 +8213,6 @@
   gl_api_->glClearBufferivFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearBufferuivFn(GLenum buffer,
                                     GLint drawbuffer,
                                     const GLuint* value) {
@@ -9050,7 +8222,6 @@
   gl_api_->glClearBufferuivFn(buffer, drawbuffer, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearColorFn(GLclampf red,
                                 GLclampf green,
                                 GLclampf blue,
@@ -9061,28 +8232,24 @@
   gl_api_->glClearColorFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearDepthFn(GLclampd depth) {
   GL_SERVICE_LOG("glClearDepth"
                  << "(" << depth << ")");
   gl_api_->glClearDepthFn(depth);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearDepthfFn(GLclampf depth) {
   GL_SERVICE_LOG("glClearDepthf"
                  << "(" << depth << ")");
   gl_api_->glClearDepthfFn(depth);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glClearStencilFn(GLint s) {
   GL_SERVICE_LOG("glClearStencil"
                  << "(" << s << ")");
   gl_api_->glClearStencilFn(s);
 }
 
-DISABLE_CFI_ICALL
 GLenum DebugGLApi::glClientWaitSyncFn(GLsync sync,
                                       GLbitfield flags,
                                       GLuint64 timeout) {
@@ -9093,7 +8260,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glColorMaskFn(GLboolean red,
                                GLboolean green,
                                GLboolean blue,
@@ -9106,14 +8272,12 @@
   gl_api_->glColorMaskFn(red, green, blue, alpha);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompileShaderFn(GLuint shader) {
   GL_SERVICE_LOG("glCompileShader"
                  << "(" << shader << ")");
   gl_api_->glCompileShaderFn(shader);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedCopyTextureCHROMIUMFn(GLuint sourceId,
                                                    GLuint destId) {
   GL_SERVICE_LOG("glCompressedCopyTextureCHROMIUM"
@@ -9121,7 +8285,6 @@
   gl_api_->glCompressedCopyTextureCHROMIUMFn(sourceId, destId);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedTexImage2DFn(GLenum target,
                                           GLint level,
                                           GLenum internalformat,
@@ -9139,7 +8302,6 @@
                                     height, border, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedTexImage2DRobustANGLEFn(GLenum target,
                                                      GLint level,
                                                      GLenum internalformat,
@@ -9160,7 +8322,6 @@
                                                dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedTexImage3DFn(GLenum target,
                                           GLint level,
                                           GLenum internalformat,
@@ -9180,7 +8341,6 @@
                                     height, depth, border, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedTexImage3DRobustANGLEFn(GLenum target,
                                                      GLint level,
                                                      GLenum internalformat,
@@ -9202,7 +8362,6 @@
                                                imageSize, dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedTexSubImage2DFn(GLenum target,
                                              GLint level,
                                              GLint xoffset,
@@ -9221,7 +8380,6 @@
                                        height, format, imageSize, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedTexSubImage2DRobustANGLEFn(GLenum target,
                                                         GLint level,
                                                         GLint xoffset,
@@ -9243,7 +8401,6 @@
       dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedTexSubImage3DFn(GLenum target,
                                              GLint level,
                                              GLint xoffset,
@@ -9266,7 +8423,6 @@
                                        data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCompressedTexSubImage3DRobustANGLEFn(GLenum target,
                                                         GLint level,
                                                         GLint xoffset,
@@ -9290,7 +8446,6 @@
       imageSize, dataSize, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCopyBufferSubDataFn(GLenum readTarget,
                                        GLenum writeTarget,
                                        GLintptr readOffset,
@@ -9304,7 +8459,6 @@
                                  writeOffset, size);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCopySubTextureCHROMIUMFn(GLuint sourceId,
                                             GLint sourceLevel,
                                             GLenum destTarget,
@@ -9333,7 +8487,6 @@
       unpackUnmultiplyAlpha);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCopyTexImage2DFn(GLenum target,
                                     GLint level,
                                     GLenum internalformat,
@@ -9351,7 +8504,6 @@
                               height, border);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCopyTexSubImage2DFn(GLenum target,
                                        GLint level,
                                        GLint xoffset,
@@ -9368,7 +8520,6 @@
                                  height);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCopyTexSubImage3DFn(GLenum target,
                                        GLint level,
                                        GLint xoffset,
@@ -9387,7 +8538,6 @@
                                  width, height);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCopyTextureCHROMIUMFn(GLuint sourceId,
                                          GLint sourceLevel,
                                          GLenum destTarget,
@@ -9411,14 +8561,12 @@
       destType, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCoverageModulationNVFn(GLenum components) {
   GL_SERVICE_LOG("glCoverageModulationNV"
                  << "(" << GLEnums::GetStringEnum(components) << ")");
   gl_api_->glCoverageModulationNVFn(components);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCoverFillPathInstancedNVFn(GLsizei numPaths,
                                               GLenum pathNameType,
                                               const void* paths,
@@ -9438,7 +8586,6 @@
                                         transformValues);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCoverFillPathNVFn(GLuint path, GLenum coverMode) {
   GL_SERVICE_LOG("glCoverFillPathNV"
                  << "(" << path << ", " << GLEnums::GetStringEnum(coverMode)
@@ -9446,7 +8593,6 @@
   gl_api_->glCoverFillPathNVFn(path, coverMode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCoverStrokePathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -9467,7 +8613,6 @@
                                           transformValues);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCoverStrokePathNVFn(GLuint name, GLenum coverMode) {
   GL_SERVICE_LOG("glCoverStrokePathNV"
                  << "(" << name << ", " << GLEnums::GetStringEnum(coverMode)
@@ -9475,7 +8620,6 @@
   gl_api_->glCoverStrokePathNVFn(name, coverMode);
 }
 
-DISABLE_CFI_ICALL
 GLuint DebugGLApi::glCreateProgramFn(void) {
   GL_SERVICE_LOG("glCreateProgram"
                  << "("
@@ -9485,7 +8629,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLuint DebugGLApi::glCreateShaderFn(GLenum type) {
   GL_SERVICE_LOG("glCreateShader"
                  << "(" << GLEnums::GetStringEnum(type) << ")");
@@ -9494,14 +8637,12 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glCullFaceFn(GLenum mode) {
   GL_SERVICE_LOG("glCullFace"
                  << "(" << GLEnums::GetStringEnum(mode) << ")");
   gl_api_->glCullFaceFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDebugMessageCallbackFn(GLDEBUGPROC callback,
                                           const void* userParam) {
   GL_SERVICE_LOG("glDebugMessageCallback"
@@ -9510,7 +8651,6 @@
   gl_api_->glDebugMessageCallbackFn(callback, userParam);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDebugMessageControlFn(GLenum source,
                                          GLenum type,
                                          GLenum severity,
@@ -9526,7 +8666,6 @@
   gl_api_->glDebugMessageControlFn(source, type, severity, count, ids, enabled);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDebugMessageInsertFn(GLenum source,
                                         GLenum type,
                                         GLuint id,
@@ -9541,7 +8680,6 @@
   gl_api_->glDebugMessageInsertFn(source, type, id, severity, length, buf);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteBuffersARBFn(GLsizei n, const GLuint* buffers) {
   GL_SERVICE_LOG("glDeleteBuffersARB"
                  << "(" << n << ", " << static_cast<const void*>(buffers)
@@ -9549,7 +8687,6 @@
   gl_api_->glDeleteBuffersARBFn(n, buffers);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteFencesAPPLEFn(GLsizei n, const GLuint* fences) {
   GL_SERVICE_LOG("glDeleteFencesAPPLE"
                  << "(" << n << ", " << static_cast<const void*>(fences)
@@ -9557,7 +8694,6 @@
   gl_api_->glDeleteFencesAPPLEFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteFencesNVFn(GLsizei n, const GLuint* fences) {
   GL_SERVICE_LOG("glDeleteFencesNV"
                  << "(" << n << ", " << static_cast<const void*>(fences)
@@ -9565,7 +8701,6 @@
   gl_api_->glDeleteFencesNVFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteFramebuffersEXTFn(GLsizei n,
                                            const GLuint* framebuffers) {
   GL_SERVICE_LOG("glDeleteFramebuffersEXT"
@@ -9574,28 +8709,24 @@
   gl_api_->glDeleteFramebuffersEXTFn(n, framebuffers);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeletePathsNVFn(GLuint path, GLsizei range) {
   GL_SERVICE_LOG("glDeletePathsNV"
                  << "(" << path << ", " << range << ")");
   gl_api_->glDeletePathsNVFn(path, range);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteProgramFn(GLuint program) {
   GL_SERVICE_LOG("glDeleteProgram"
                  << "(" << program << ")");
   gl_api_->glDeleteProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteQueriesFn(GLsizei n, const GLuint* ids) {
   GL_SERVICE_LOG("glDeleteQueries"
                  << "(" << n << ", " << static_cast<const void*>(ids) << ")");
   gl_api_->glDeleteQueriesFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteRenderbuffersEXTFn(GLsizei n,
                                             const GLuint* renderbuffers) {
   GL_SERVICE_LOG("glDeleteRenderbuffersEXT"
@@ -9604,7 +8735,6 @@
   gl_api_->glDeleteRenderbuffersEXTFn(n, renderbuffers);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteSamplersFn(GLsizei n, const GLuint* samplers) {
   GL_SERVICE_LOG("glDeleteSamplers"
                  << "(" << n << ", " << static_cast<const void*>(samplers)
@@ -9612,21 +8742,18 @@
   gl_api_->glDeleteSamplersFn(n, samplers);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteShaderFn(GLuint shader) {
   GL_SERVICE_LOG("glDeleteShader"
                  << "(" << shader << ")");
   gl_api_->glDeleteShaderFn(shader);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteSyncFn(GLsync sync) {
   GL_SERVICE_LOG("glDeleteSync"
                  << "(" << sync << ")");
   gl_api_->glDeleteSyncFn(sync);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteTexturesFn(GLsizei n, const GLuint* textures) {
   GL_SERVICE_LOG("glDeleteTextures"
                  << "(" << n << ", " << static_cast<const void*>(textures)
@@ -9634,14 +8761,12 @@
   gl_api_->glDeleteTexturesFn(n, textures);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteTransformFeedbacksFn(GLsizei n, const GLuint* ids) {
   GL_SERVICE_LOG("glDeleteTransformFeedbacks"
                  << "(" << n << ", " << static_cast<const void*>(ids) << ")");
   gl_api_->glDeleteTransformFeedbacksFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDeleteVertexArraysOESFn(GLsizei n, const GLuint* arrays) {
   GL_SERVICE_LOG("glDeleteVertexArraysOES"
                  << "(" << n << ", " << static_cast<const void*>(arrays)
@@ -9649,56 +8774,48 @@
   gl_api_->glDeleteVertexArraysOESFn(n, arrays);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDepthFuncFn(GLenum func) {
   GL_SERVICE_LOG("glDepthFunc"
                  << "(" << GLEnums::GetStringEnum(func) << ")");
   gl_api_->glDepthFuncFn(func);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDepthMaskFn(GLboolean flag) {
   GL_SERVICE_LOG("glDepthMask"
                  << "(" << GLEnums::GetStringBool(flag) << ")");
   gl_api_->glDepthMaskFn(flag);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDepthRangeFn(GLclampd zNear, GLclampd zFar) {
   GL_SERVICE_LOG("glDepthRange"
                  << "(" << zNear << ", " << zFar << ")");
   gl_api_->glDepthRangeFn(zNear, zFar);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDepthRangefFn(GLclampf zNear, GLclampf zFar) {
   GL_SERVICE_LOG("glDepthRangef"
                  << "(" << zNear << ", " << zFar << ")");
   gl_api_->glDepthRangefFn(zNear, zFar);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDetachShaderFn(GLuint program, GLuint shader) {
   GL_SERVICE_LOG("glDetachShader"
                  << "(" << program << ", " << shader << ")");
   gl_api_->glDetachShaderFn(program, shader);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDisableFn(GLenum cap) {
   GL_SERVICE_LOG("glDisable"
                  << "(" << GLEnums::GetStringEnum(cap) << ")");
   gl_api_->glDisableFn(cap);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDisableVertexAttribArrayFn(GLuint index) {
   GL_SERVICE_LOG("glDisableVertexAttribArray"
                  << "(" << index << ")");
   gl_api_->glDisableVertexAttribArrayFn(index);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDiscardFramebufferEXTFn(GLenum target,
                                            GLsizei numAttachments,
                                            const GLenum* attachments) {
@@ -9709,7 +8826,6 @@
   gl_api_->glDiscardFramebufferEXTFn(target, numAttachments, attachments);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDrawArraysFn(GLenum mode, GLint first, GLsizei count) {
   GL_SERVICE_LOG("glDrawArrays"
                  << "(" << GLEnums::GetStringEnum(mode) << ", " << first << ", "
@@ -9717,7 +8833,6 @@
   gl_api_->glDrawArraysFn(mode, first, count);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDrawArraysInstancedANGLEFn(GLenum mode,
                                               GLint first,
                                               GLsizei count,
@@ -9728,21 +8843,18 @@
   gl_api_->glDrawArraysInstancedANGLEFn(mode, first, count, primcount);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDrawBufferFn(GLenum mode) {
   GL_SERVICE_LOG("glDrawBuffer"
                  << "(" << GLEnums::GetStringEnum(mode) << ")");
   gl_api_->glDrawBufferFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDrawBuffersARBFn(GLsizei n, const GLenum* bufs) {
   GL_SERVICE_LOG("glDrawBuffersARB"
                  << "(" << n << ", " << static_cast<const void*>(bufs) << ")");
   gl_api_->glDrawBuffersARBFn(n, bufs);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDrawElementsFn(GLenum mode,
                                   GLsizei count,
                                   GLenum type,
@@ -9754,7 +8866,6 @@
   gl_api_->glDrawElementsFn(mode, count, type, indices);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDrawElementsInstancedANGLEFn(GLenum mode,
                                                 GLsizei count,
                                                 GLenum type,
@@ -9769,7 +8880,6 @@
                                           primcount);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glDrawRangeElementsFn(GLenum mode,
                                        GLuint start,
                                        GLuint end,
@@ -9783,7 +8893,6 @@
   gl_api_->glDrawRangeElementsFn(mode, start, end, count, type, indices);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glEGLImageTargetRenderbufferStorageOESFn(GLenum target,
                                                           GLeglImageOES image) {
   GL_SERVICE_LOG("glEGLImageTargetRenderbufferStorageOES"
@@ -9792,7 +8901,6 @@
   gl_api_->glEGLImageTargetRenderbufferStorageOESFn(target, image);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glEGLImageTargetTexture2DOESFn(GLenum target,
                                                 GLeglImageOES image) {
   GL_SERVICE_LOG("glEGLImageTargetTexture2DOES"
@@ -9801,28 +8909,24 @@
   gl_api_->glEGLImageTargetTexture2DOESFn(target, image);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glEnableFn(GLenum cap) {
   GL_SERVICE_LOG("glEnable"
                  << "(" << GLEnums::GetStringEnum(cap) << ")");
   gl_api_->glEnableFn(cap);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glEnableVertexAttribArrayFn(GLuint index) {
   GL_SERVICE_LOG("glEnableVertexAttribArray"
                  << "(" << index << ")");
   gl_api_->glEnableVertexAttribArrayFn(index);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glEndQueryFn(GLenum target) {
   GL_SERVICE_LOG("glEndQuery"
                  << "(" << GLEnums::GetStringEnum(target) << ")");
   gl_api_->glEndQueryFn(target);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glEndTransformFeedbackFn(void) {
   GL_SERVICE_LOG("glEndTransformFeedback"
                  << "("
@@ -9830,7 +8934,6 @@
   gl_api_->glEndTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 GLsync DebugGLApi::glFenceSyncFn(GLenum condition, GLbitfield flags) {
   GL_SERVICE_LOG("glFenceSync"
                  << "(" << GLEnums::GetStringEnum(condition) << ", " << flags
@@ -9840,7 +8943,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFinishFn(void) {
   GL_SERVICE_LOG("glFinish"
                  << "("
@@ -9848,21 +8950,18 @@
   gl_api_->glFinishFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFinishFenceAPPLEFn(GLuint fence) {
   GL_SERVICE_LOG("glFinishFenceAPPLE"
                  << "(" << fence << ")");
   gl_api_->glFinishFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFinishFenceNVFn(GLuint fence) {
   GL_SERVICE_LOG("glFinishFenceNV"
                  << "(" << fence << ")");
   gl_api_->glFinishFenceNVFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFlushFn(void) {
   GL_SERVICE_LOG("glFlush"
                  << "("
@@ -9870,7 +8969,6 @@
   gl_api_->glFlushFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFlushMappedBufferRangeFn(GLenum target,
                                             GLintptr offset,
                                             GLsizeiptr length) {
@@ -9880,7 +8978,6 @@
   gl_api_->glFlushMappedBufferRangeFn(target, offset, length);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFramebufferRenderbufferEXTFn(GLenum target,
                                                 GLenum attachment,
                                                 GLenum renderbuffertarget,
@@ -9894,7 +8991,6 @@
                                           renderbuffertarget, renderbuffer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFramebufferTexture2DEXTFn(GLenum target,
                                              GLenum attachment,
                                              GLenum textarget,
@@ -9909,7 +9005,6 @@
                                        level);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFramebufferTexture2DMultisampleEXTFn(GLenum target,
                                                         GLenum attachment,
                                                         GLenum textarget,
@@ -9925,7 +9020,6 @@
                                                   texture, level, samples);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFramebufferTextureLayerFn(GLenum target,
                                              GLenum attachment,
                                              GLuint texture,
@@ -9939,14 +9033,12 @@
                                        layer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glFrontFaceFn(GLenum mode) {
   GL_SERVICE_LOG("glFrontFace"
                  << "(" << GLEnums::GetStringEnum(mode) << ")");
   gl_api_->glFrontFaceFn(mode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenBuffersARBFn(GLsizei n, GLuint* buffers) {
   GL_SERVICE_LOG("glGenBuffersARB"
                  << "(" << n << ", " << static_cast<const void*>(buffers)
@@ -9954,14 +9046,12 @@
   gl_api_->glGenBuffersARBFn(n, buffers);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenerateMipmapEXTFn(GLenum target) {
   GL_SERVICE_LOG("glGenerateMipmapEXT"
                  << "(" << GLEnums::GetStringEnum(target) << ")");
   gl_api_->glGenerateMipmapEXTFn(target);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenFencesAPPLEFn(GLsizei n, GLuint* fences) {
   GL_SERVICE_LOG("glGenFencesAPPLE"
                  << "(" << n << ", " << static_cast<const void*>(fences)
@@ -9969,7 +9059,6 @@
   gl_api_->glGenFencesAPPLEFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenFencesNVFn(GLsizei n, GLuint* fences) {
   GL_SERVICE_LOG("glGenFencesNV"
                  << "(" << n << ", " << static_cast<const void*>(fences)
@@ -9977,7 +9066,6 @@
   gl_api_->glGenFencesNVFn(n, fences);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenFramebuffersEXTFn(GLsizei n, GLuint* framebuffers) {
   GL_SERVICE_LOG("glGenFramebuffersEXT"
                  << "(" << n << ", " << static_cast<const void*>(framebuffers)
@@ -9985,7 +9073,6 @@
   gl_api_->glGenFramebuffersEXTFn(n, framebuffers);
 }
 
-DISABLE_CFI_ICALL
 GLuint DebugGLApi::glGenPathsNVFn(GLsizei range) {
   GL_SERVICE_LOG("glGenPathsNV"
                  << "(" << range << ")");
@@ -9994,14 +9081,12 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenQueriesFn(GLsizei n, GLuint* ids) {
   GL_SERVICE_LOG("glGenQueries"
                  << "(" << n << ", " << static_cast<const void*>(ids) << ")");
   gl_api_->glGenQueriesFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenRenderbuffersEXTFn(GLsizei n, GLuint* renderbuffers) {
   GL_SERVICE_LOG("glGenRenderbuffersEXT"
                  << "(" << n << ", " << static_cast<const void*>(renderbuffers)
@@ -10009,7 +9094,6 @@
   gl_api_->glGenRenderbuffersEXTFn(n, renderbuffers);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenSamplersFn(GLsizei n, GLuint* samplers) {
   GL_SERVICE_LOG("glGenSamplers"
                  << "(" << n << ", " << static_cast<const void*>(samplers)
@@ -10017,7 +9101,6 @@
   gl_api_->glGenSamplersFn(n, samplers);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenTexturesFn(GLsizei n, GLuint* textures) {
   GL_SERVICE_LOG("glGenTextures"
                  << "(" << n << ", " << static_cast<const void*>(textures)
@@ -10025,14 +9108,12 @@
   gl_api_->glGenTexturesFn(n, textures);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenTransformFeedbacksFn(GLsizei n, GLuint* ids) {
   GL_SERVICE_LOG("glGenTransformFeedbacks"
                  << "(" << n << ", " << static_cast<const void*>(ids) << ")");
   gl_api_->glGenTransformFeedbacksFn(n, ids);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGenVertexArraysOESFn(GLsizei n, GLuint* arrays) {
   GL_SERVICE_LOG("glGenVertexArraysOES"
                  << "(" << n << ", " << static_cast<const void*>(arrays)
@@ -10040,7 +9121,6 @@
   gl_api_->glGenVertexArraysOESFn(n, arrays);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetActiveAttribFn(GLuint program,
                                      GLuint index,
                                      GLsizei bufsize,
@@ -10058,7 +9138,6 @@
                                name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetActiveUniformFn(GLuint program,
                                       GLuint index,
                                       GLsizei bufsize,
@@ -10076,7 +9155,6 @@
                                 name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetActiveUniformBlockivFn(GLuint program,
                                              GLuint uniformBlockIndex,
                                              GLenum pname,
@@ -10089,7 +9167,6 @@
                                        params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetActiveUniformBlockivRobustANGLEFn(
     GLuint program,
     GLuint uniformBlockIndex,
@@ -10106,7 +9183,6 @@
       program, uniformBlockIndex, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetActiveUniformBlockNameFn(GLuint program,
                                                GLuint uniformBlockIndex,
                                                GLsizei bufSize,
@@ -10120,7 +9196,6 @@
                                          length, uniformBlockName);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetActiveUniformsivFn(GLuint program,
                                          GLsizei uniformCount,
                                          const GLuint* uniformIndices,
@@ -10135,7 +9210,6 @@
                                    params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetAttachedShadersFn(GLuint program,
                                         GLsizei maxcount,
                                         GLsizei* count,
@@ -10147,7 +9221,6 @@
   gl_api_->glGetAttachedShadersFn(program, maxcount, count, shaders);
 }
 
-DISABLE_CFI_ICALL
 GLint DebugGLApi::glGetAttribLocationFn(GLuint program, const char* name) {
   GL_SERVICE_LOG("glGetAttribLocation"
                  << "(" << program << ", " << name << ")");
@@ -10156,7 +9229,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetBooleani_vRobustANGLEFn(GLenum target,
                                               GLuint index,
                                               GLsizei bufSize,
@@ -10169,7 +9241,6 @@
   gl_api_->glGetBooleani_vRobustANGLEFn(target, index, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetBooleanvFn(GLenum pname, GLboolean* params) {
   GL_SERVICE_LOG("glGetBooleanv"
                  << "(" << GLEnums::GetStringEnum(pname) << ", "
@@ -10177,7 +9248,6 @@
   gl_api_->glGetBooleanvFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetBooleanvRobustANGLEFn(GLenum pname,
                                             GLsizei bufSize,
                                             GLsizei* length,
@@ -10189,7 +9259,6 @@
   gl_api_->glGetBooleanvRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetBufferParameteri64vRobustANGLEFn(GLenum target,
                                                        GLenum pname,
                                                        GLsizei bufSize,
@@ -10204,7 +9273,6 @@
                                                  params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetBufferParameterivFn(GLenum target,
                                           GLenum pname,
                                           GLint* params) {
@@ -10215,7 +9283,6 @@
   gl_api_->glGetBufferParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetBufferParameterivRobustANGLEFn(GLenum target,
                                                      GLenum pname,
                                                      GLsizei bufSize,
@@ -10230,7 +9297,6 @@
                                                params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetBufferPointervRobustANGLEFn(GLenum target,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -10244,7 +9310,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetDebugMessageLogFn(GLuint count,
                                         GLsizei bufSize,
                                         GLenum* sources,
@@ -10265,7 +9330,6 @@
                                   severities, lengths, messageLog);
 }
 
-DISABLE_CFI_ICALL
 GLenum DebugGLApi::glGetErrorFn(void) {
   GL_SERVICE_LOG("glGetError"
                  << "("
@@ -10277,7 +9341,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetFenceivNVFn(GLuint fence, GLenum pname, GLint* params) {
   GL_SERVICE_LOG("glGetFenceivNV"
                  << "(" << fence << ", " << GLEnums::GetStringEnum(pname)
@@ -10285,7 +9348,6 @@
   gl_api_->glGetFenceivNVFn(fence, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetFloatvFn(GLenum pname, GLfloat* params) {
   GL_SERVICE_LOG("glGetFloatv"
                  << "(" << GLEnums::GetStringEnum(pname) << ", "
@@ -10293,7 +9355,6 @@
   gl_api_->glGetFloatvFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetFloatvRobustANGLEFn(GLenum pname,
                                           GLsizei bufSize,
                                           GLsizei* length,
@@ -10305,7 +9366,6 @@
   gl_api_->glGetFloatvRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 GLint DebugGLApi::glGetFragDataIndexFn(GLuint program, const char* name) {
   GL_SERVICE_LOG("glGetFragDataIndex"
                  << "(" << program << ", " << name << ")");
@@ -10314,7 +9374,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLint DebugGLApi::glGetFragDataLocationFn(GLuint program, const char* name) {
   GL_SERVICE_LOG("glGetFragDataLocation"
                  << "(" << program << ", " << name << ")");
@@ -10323,7 +9382,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetFramebufferAttachmentParameterivEXTFn(GLenum target,
                                                             GLenum attachment,
                                                             GLenum pname,
@@ -10337,7 +9395,6 @@
                                                       params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetFramebufferAttachmentParameterivRobustANGLEFn(
     GLenum target,
     GLenum attachment,
@@ -10355,7 +9412,6 @@
       target, attachment, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetFramebufferParameterivRobustANGLEFn(GLenum target,
                                                           GLenum pname,
                                                           GLsizei bufSize,
@@ -10370,7 +9426,6 @@
                                                     length, params);
 }
 
-DISABLE_CFI_ICALL
 GLenum DebugGLApi::glGetGraphicsResetStatusARBFn(void) {
   GL_SERVICE_LOG("glGetGraphicsResetStatusARB"
                  << "("
@@ -10380,7 +9435,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetInteger64i_vFn(GLenum target,
                                      GLuint index,
                                      GLint64* data) {
@@ -10390,7 +9444,6 @@
   gl_api_->glGetInteger64i_vFn(target, index, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetInteger64i_vRobustANGLEFn(GLenum target,
                                                 GLuint index,
                                                 GLsizei bufSize,
@@ -10403,7 +9456,6 @@
   gl_api_->glGetInteger64i_vRobustANGLEFn(target, index, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetInteger64vFn(GLenum pname, GLint64* params) {
   GL_SERVICE_LOG("glGetInteger64v"
                  << "(" << GLEnums::GetStringEnum(pname) << ", "
@@ -10411,7 +9463,6 @@
   gl_api_->glGetInteger64vFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetInteger64vRobustANGLEFn(GLenum pname,
                                               GLsizei bufSize,
                                               GLsizei* length,
@@ -10423,7 +9474,6 @@
   gl_api_->glGetInteger64vRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetIntegeri_vFn(GLenum target, GLuint index, GLint* data) {
   GL_SERVICE_LOG("glGetIntegeri_v"
                  << "(" << GLEnums::GetStringEnum(target) << ", " << index
@@ -10431,7 +9481,6 @@
   gl_api_->glGetIntegeri_vFn(target, index, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetIntegeri_vRobustANGLEFn(GLenum target,
                                               GLuint index,
                                               GLsizei bufSize,
@@ -10444,7 +9493,6 @@
   gl_api_->glGetIntegeri_vRobustANGLEFn(target, index, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetIntegervFn(GLenum pname, GLint* params) {
   GL_SERVICE_LOG("glGetIntegerv"
                  << "(" << GLEnums::GetStringEnum(pname) << ", "
@@ -10452,7 +9500,6 @@
   gl_api_->glGetIntegervFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetIntegervRobustANGLEFn(GLenum pname,
                                             GLsizei bufSize,
                                             GLsizei* length,
@@ -10464,7 +9511,6 @@
   gl_api_->glGetIntegervRobustANGLEFn(pname, bufSize, length, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetInternalformativFn(GLenum target,
                                          GLenum internalformat,
                                          GLenum pname,
@@ -10479,7 +9525,6 @@
                                    params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetInternalformativRobustANGLEFn(GLenum target,
                                                     GLenum internalformat,
                                                     GLenum pname,
@@ -10496,7 +9541,6 @@
                                               bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetMultisamplefvFn(GLenum pname,
                                       GLuint index,
                                       GLfloat* val) {
@@ -10506,7 +9550,6 @@
   gl_api_->glGetMultisamplefvFn(pname, index, val);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetMultisamplefvRobustANGLEFn(GLenum pname,
                                                  GLuint index,
                                                  GLsizei bufSize,
@@ -10519,7 +9562,6 @@
   gl_api_->glGetMultisamplefvRobustANGLEFn(pname, index, bufSize, length, val);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetnUniformfvRobustANGLEFn(GLuint program,
                                               GLint location,
                                               GLsizei bufSize,
@@ -10533,7 +9575,6 @@
                                         params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetnUniformivRobustANGLEFn(GLuint program,
                                               GLint location,
                                               GLsizei bufSize,
@@ -10547,7 +9588,6 @@
                                         params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetnUniformuivRobustANGLEFn(GLuint program,
                                                GLint location,
                                                GLsizei bufSize,
@@ -10561,7 +9601,6 @@
                                          params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetObjectLabelFn(GLenum identifier,
                                     GLuint name,
                                     GLsizei bufSize,
@@ -10574,7 +9613,6 @@
   gl_api_->glGetObjectLabelFn(identifier, name, bufSize, length, label);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetObjectPtrLabelFn(void* ptr,
                                        GLsizei bufSize,
                                        GLsizei* length,
@@ -10586,7 +9624,6 @@
   gl_api_->glGetObjectPtrLabelFn(ptr, bufSize, length, label);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetPointervFn(GLenum pname, void** params) {
   GL_SERVICE_LOG("glGetPointerv"
                  << "(" << GLEnums::GetStringEnum(pname) << ", " << params
@@ -10594,7 +9631,6 @@
   gl_api_->glGetPointervFn(pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetPointervRobustANGLERobustANGLEFn(GLenum pname,
                                                        GLsizei bufSize,
                                                        GLsizei* length,
@@ -10607,7 +9643,6 @@
                                                  params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetProgramBinaryFn(GLuint program,
                                       GLsizei bufSize,
                                       GLsizei* length,
@@ -10621,7 +9656,6 @@
   gl_api_->glGetProgramBinaryFn(program, bufSize, length, binaryFormat, binary);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetProgramInfoLogFn(GLuint program,
                                        GLsizei bufsize,
                                        GLsizei* length,
@@ -10633,7 +9667,6 @@
   gl_api_->glGetProgramInfoLogFn(program, bufsize, length, infolog);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetProgramInterfaceivFn(GLuint program,
                                            GLenum programInterface,
                                            GLenum pname,
@@ -10646,7 +9679,6 @@
   gl_api_->glGetProgramInterfaceivFn(program, programInterface, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetProgramInterfaceivRobustANGLEFn(GLuint program,
                                                       GLenum programInterface,
                                                       GLenum pname,
@@ -10663,7 +9695,6 @@
                                                 pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetProgramivFn(GLuint program, GLenum pname, GLint* params) {
   GL_SERVICE_LOG("glGetProgramiv"
                  << "(" << program << ", " << GLEnums::GetStringEnum(pname)
@@ -10671,7 +9702,6 @@
   gl_api_->glGetProgramivFn(program, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetProgramivRobustANGLEFn(GLuint program,
                                              GLenum pname,
                                              GLsizei bufSize,
@@ -10684,7 +9714,6 @@
   gl_api_->glGetProgramivRobustANGLEFn(program, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetProgramResourceivFn(GLuint program,
                                           GLenum programInterface,
                                           GLuint index,
@@ -10703,7 +9732,6 @@
                                     props, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 GLint DebugGLApi::glGetProgramResourceLocationFn(GLuint program,
                                                  GLenum programInterface,
                                                  const char* name) {
@@ -10717,7 +9745,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetProgramResourceNameFn(GLuint program,
                                             GLenum programInterface,
                                             GLuint index,
@@ -10733,7 +9760,6 @@
                                       length, name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryivFn(GLenum target, GLenum pname, GLint* params) {
   GL_SERVICE_LOG("glGetQueryiv"
                  << "(" << GLEnums::GetStringEnum(target) << ", "
@@ -10742,7 +9768,6 @@
   gl_api_->glGetQueryivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryivRobustANGLEFn(GLenum target,
                                            GLenum pname,
                                            GLsizei bufSize,
@@ -10756,7 +9781,6 @@
   gl_api_->glGetQueryivRobustANGLEFn(target, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryObjecti64vFn(GLuint id,
                                         GLenum pname,
                                         GLint64* params) {
@@ -10766,7 +9790,6 @@
   gl_api_->glGetQueryObjecti64vFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryObjecti64vRobustANGLEFn(GLuint id,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -10780,7 +9803,6 @@
                                              params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryObjectivFn(GLuint id, GLenum pname, GLint* params) {
   GL_SERVICE_LOG("glGetQueryObjectiv"
                  << "(" << id << ", " << GLEnums::GetStringEnum(pname) << ", "
@@ -10788,7 +9810,6 @@
   gl_api_->glGetQueryObjectivFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryObjectivRobustANGLEFn(GLuint id,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -10801,7 +9822,6 @@
   gl_api_->glGetQueryObjectivRobustANGLEFn(id, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryObjectui64vFn(GLuint id,
                                          GLenum pname,
                                          GLuint64* params) {
@@ -10811,7 +9831,6 @@
   gl_api_->glGetQueryObjectui64vFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryObjectui64vRobustANGLEFn(GLuint id,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -10825,7 +9844,6 @@
                                               params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryObjectuivFn(GLuint id,
                                        GLenum pname,
                                        GLuint* params) {
@@ -10835,7 +9853,6 @@
   gl_api_->glGetQueryObjectuivFn(id, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetQueryObjectuivRobustANGLEFn(GLuint id,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -10848,7 +9865,6 @@
   gl_api_->glGetQueryObjectuivRobustANGLEFn(id, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetRenderbufferParameterivEXTFn(GLenum target,
                                                    GLenum pname,
                                                    GLint* params) {
@@ -10859,7 +9875,6 @@
   gl_api_->glGetRenderbufferParameterivEXTFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetRenderbufferParameterivRobustANGLEFn(GLenum target,
                                                            GLenum pname,
                                                            GLsizei bufSize,
@@ -10874,7 +9889,6 @@
                                                      length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetSamplerParameterfvFn(GLuint sampler,
                                            GLenum pname,
                                            GLfloat* params) {
@@ -10884,7 +9898,6 @@
   gl_api_->glGetSamplerParameterfvFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetSamplerParameterfvRobustANGLEFn(GLuint sampler,
                                                       GLenum pname,
                                                       GLsizei bufSize,
@@ -10898,7 +9911,6 @@
                                                 params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetSamplerParameterIivRobustANGLEFn(GLuint sampler,
                                                        GLenum pname,
                                                        GLsizei bufSize,
@@ -10912,7 +9924,6 @@
                                                  length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetSamplerParameterIuivRobustANGLEFn(GLuint sampler,
                                                         GLenum pname,
                                                         GLsizei bufSize,
@@ -10926,7 +9937,6 @@
                                                   length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetSamplerParameterivFn(GLuint sampler,
                                            GLenum pname,
                                            GLint* params) {
@@ -10936,7 +9946,6 @@
   gl_api_->glGetSamplerParameterivFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetSamplerParameterivRobustANGLEFn(GLuint sampler,
                                                       GLenum pname,
                                                       GLsizei bufSize,
@@ -10950,7 +9959,6 @@
                                                 params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetShaderInfoLogFn(GLuint shader,
                                       GLsizei bufsize,
                                       GLsizei* length,
@@ -10962,7 +9970,6 @@
   gl_api_->glGetShaderInfoLogFn(shader, bufsize, length, infolog);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetShaderivFn(GLuint shader, GLenum pname, GLint* params) {
   GL_SERVICE_LOG("glGetShaderiv"
                  << "(" << shader << ", " << GLEnums::GetStringEnum(pname)
@@ -10970,7 +9977,6 @@
   gl_api_->glGetShaderivFn(shader, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetShaderivRobustANGLEFn(GLuint shader,
                                             GLenum pname,
                                             GLsizei bufSize,
@@ -10983,7 +9989,6 @@
   gl_api_->glGetShaderivRobustANGLEFn(shader, pname, bufSize, length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetShaderPrecisionFormatFn(GLenum shadertype,
                                               GLenum precisiontype,
                                               GLint* range,
@@ -10997,7 +10002,6 @@
                                         precision);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetShaderSourceFn(GLuint shader,
                                      GLsizei bufsize,
                                      GLsizei* length,
@@ -11009,7 +10013,6 @@
   gl_api_->glGetShaderSourceFn(shader, bufsize, length, source);
 }
 
-DISABLE_CFI_ICALL
 const GLubyte* DebugGLApi::glGetStringFn(GLenum name) {
   GL_SERVICE_LOG("glGetString"
                  << "(" << GLEnums::GetStringEnum(name) << ")");
@@ -11018,7 +10021,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 const GLubyte* DebugGLApi::glGetStringiFn(GLenum name, GLuint index) {
   GL_SERVICE_LOG("glGetStringi"
                  << "(" << GLEnums::GetStringEnum(name) << ", " << index
@@ -11028,7 +10030,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetSyncivFn(GLsync sync,
                                GLenum pname,
                                GLsizei bufSize,
@@ -11041,7 +10042,6 @@
   gl_api_->glGetSyncivFn(sync, pname, bufSize, length, values);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexLevelParameterfvFn(GLenum target,
                                             GLint level,
                                             GLenum pname,
@@ -11053,7 +10053,6 @@
   gl_api_->glGetTexLevelParameterfvFn(target, level, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexLevelParameterfvRobustANGLEFn(GLenum target,
                                                        GLint level,
                                                        GLenum pname,
@@ -11069,7 +10068,6 @@
                                                  length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexLevelParameterivFn(GLenum target,
                                             GLint level,
                                             GLenum pname,
@@ -11081,7 +10079,6 @@
   gl_api_->glGetTexLevelParameterivFn(target, level, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexLevelParameterivRobustANGLEFn(GLenum target,
                                                        GLint level,
                                                        GLenum pname,
@@ -11097,7 +10094,6 @@
                                                  length, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexParameterfvFn(GLenum target,
                                        GLenum pname,
                                        GLfloat* params) {
@@ -11108,7 +10104,6 @@
   gl_api_->glGetTexParameterfvFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexParameterfvRobustANGLEFn(GLenum target,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -11123,7 +10118,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexParameterIivRobustANGLEFn(GLenum target,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -11138,7 +10132,6 @@
                                              params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexParameterIuivRobustANGLEFn(GLenum target,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -11153,7 +10146,6 @@
                                               params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexParameterivFn(GLenum target,
                                        GLenum pname,
                                        GLint* params) {
@@ -11164,7 +10156,6 @@
   gl_api_->glGetTexParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTexParameterivRobustANGLEFn(GLenum target,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -11179,7 +10170,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTransformFeedbackVaryingFn(GLuint program,
                                                  GLuint index,
                                                  GLsizei bufSize,
@@ -11197,7 +10187,6 @@
                                            size, type, name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetTranslatedShaderSourceANGLEFn(GLuint shader,
                                                     GLsizei bufsize,
                                                     GLsizei* length,
@@ -11209,7 +10198,6 @@
   gl_api_->glGetTranslatedShaderSourceANGLEFn(shader, bufsize, length, source);
 }
 
-DISABLE_CFI_ICALL
 GLuint DebugGLApi::glGetUniformBlockIndexFn(GLuint program,
                                             const char* uniformBlockName) {
   GL_SERVICE_LOG("glGetUniformBlockIndex"
@@ -11219,7 +10207,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetUniformfvFn(GLuint program,
                                   GLint location,
                                   GLfloat* params) {
@@ -11229,7 +10216,6 @@
   gl_api_->glGetUniformfvFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetUniformfvRobustANGLEFn(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
@@ -11243,7 +10229,6 @@
                                        params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetUniformIndicesFn(GLuint program,
                                        GLsizei uniformCount,
                                        const char* const* uniformNames,
@@ -11256,7 +10241,6 @@
                                  uniformIndices);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetUniformivFn(GLuint program,
                                   GLint location,
                                   GLint* params) {
@@ -11266,7 +10250,6 @@
   gl_api_->glGetUniformivFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetUniformivRobustANGLEFn(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
@@ -11280,7 +10263,6 @@
                                        params);
 }
 
-DISABLE_CFI_ICALL
 GLint DebugGLApi::glGetUniformLocationFn(GLuint program, const char* name) {
   GL_SERVICE_LOG("glGetUniformLocation"
                  << "(" << program << ", " << name << ")");
@@ -11289,7 +10271,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetUniformuivFn(GLuint program,
                                    GLint location,
                                    GLuint* params) {
@@ -11299,7 +10280,6 @@
   gl_api_->glGetUniformuivFn(program, location, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetUniformuivRobustANGLEFn(GLuint program,
                                               GLint location,
                                               GLsizei bufSize,
@@ -11313,7 +10293,6 @@
                                         params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetVertexAttribfvFn(GLuint index,
                                        GLenum pname,
                                        GLfloat* params) {
@@ -11323,7 +10302,6 @@
   gl_api_->glGetVertexAttribfvFn(index, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetVertexAttribfvRobustANGLEFn(GLuint index,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -11337,7 +10315,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetVertexAttribIivRobustANGLEFn(GLuint index,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -11351,7 +10328,6 @@
                                              params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetVertexAttribIuivRobustANGLEFn(GLuint index,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -11365,7 +10341,6 @@
                                               params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetVertexAttribivFn(GLuint index,
                                        GLenum pname,
                                        GLint* params) {
@@ -11375,7 +10350,6 @@
   gl_api_->glGetVertexAttribivFn(index, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetVertexAttribivRobustANGLEFn(GLuint index,
                                                   GLenum pname,
                                                   GLsizei bufSize,
@@ -11389,7 +10363,6 @@
                                             params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetVertexAttribPointervFn(GLuint index,
                                              GLenum pname,
                                              void** pointer) {
@@ -11399,7 +10372,6 @@
   gl_api_->glGetVertexAttribPointervFn(index, pname, pointer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glGetVertexAttribPointervRobustANGLEFn(GLuint index,
                                                         GLenum pname,
                                                         GLsizei bufSize,
@@ -11413,7 +10385,6 @@
                                                   pointer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glHintFn(GLenum target, GLenum mode) {
   GL_SERVICE_LOG("glHint"
                  << "(" << GLEnums::GetStringEnum(target) << ", "
@@ -11421,14 +10392,12 @@
   gl_api_->glHintFn(target, mode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glInsertEventMarkerEXTFn(GLsizei length, const char* marker) {
   GL_SERVICE_LOG("glInsertEventMarkerEXT"
                  << "(" << length << ", " << marker << ")");
   gl_api_->glInsertEventMarkerEXTFn(length, marker);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glInvalidateFramebufferFn(GLenum target,
                                            GLsizei numAttachments,
                                            const GLenum* attachments) {
@@ -11439,7 +10408,6 @@
   gl_api_->glInvalidateFramebufferFn(target, numAttachments, attachments);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glInvalidateSubFramebufferFn(GLenum target,
                                               GLsizei numAttachments,
                                               const GLenum* attachments,
@@ -11456,7 +10424,6 @@
                                         y, width, height);
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsBufferFn(GLuint buffer) {
   GL_SERVICE_LOG("glIsBuffer"
                  << "(" << buffer << ")");
@@ -11465,7 +10432,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsEnabledFn(GLenum cap) {
   GL_SERVICE_LOG("glIsEnabled"
                  << "(" << GLEnums::GetStringEnum(cap) << ")");
@@ -11474,7 +10440,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsFenceAPPLEFn(GLuint fence) {
   GL_SERVICE_LOG("glIsFenceAPPLE"
                  << "(" << fence << ")");
@@ -11483,7 +10448,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsFenceNVFn(GLuint fence) {
   GL_SERVICE_LOG("glIsFenceNV"
                  << "(" << fence << ")");
@@ -11492,7 +10456,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsFramebufferEXTFn(GLuint framebuffer) {
   GL_SERVICE_LOG("glIsFramebufferEXT"
                  << "(" << framebuffer << ")");
@@ -11501,7 +10464,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsPathNVFn(GLuint path) {
   GL_SERVICE_LOG("glIsPathNV"
                  << "(" << path << ")");
@@ -11510,7 +10472,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsProgramFn(GLuint program) {
   GL_SERVICE_LOG("glIsProgram"
                  << "(" << program << ")");
@@ -11519,7 +10480,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsQueryFn(GLuint query) {
   GL_SERVICE_LOG("glIsQuery"
                  << "(" << query << ")");
@@ -11528,7 +10488,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsRenderbufferEXTFn(GLuint renderbuffer) {
   GL_SERVICE_LOG("glIsRenderbufferEXT"
                  << "(" << renderbuffer << ")");
@@ -11537,7 +10496,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsSamplerFn(GLuint sampler) {
   GL_SERVICE_LOG("glIsSampler"
                  << "(" << sampler << ")");
@@ -11546,7 +10504,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsShaderFn(GLuint shader) {
   GL_SERVICE_LOG("glIsShader"
                  << "(" << shader << ")");
@@ -11555,7 +10512,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsSyncFn(GLsync sync) {
   GL_SERVICE_LOG("glIsSync"
                  << "(" << sync << ")");
@@ -11564,7 +10520,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsTextureFn(GLuint texture) {
   GL_SERVICE_LOG("glIsTexture"
                  << "(" << texture << ")");
@@ -11573,7 +10528,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsTransformFeedbackFn(GLuint id) {
   GL_SERVICE_LOG("glIsTransformFeedback"
                  << "(" << id << ")");
@@ -11582,7 +10536,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glIsVertexArrayOESFn(GLuint array) {
   GL_SERVICE_LOG("glIsVertexArrayOES"
                  << "(" << array << ")");
@@ -11591,21 +10544,18 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glLineWidthFn(GLfloat width) {
   GL_SERVICE_LOG("glLineWidth"
                  << "(" << width << ")");
   gl_api_->glLineWidthFn(width);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glLinkProgramFn(GLuint program) {
   GL_SERVICE_LOG("glLinkProgram"
                  << "(" << program << ")");
   gl_api_->glLinkProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void* DebugGLApi::glMapBufferFn(GLenum target, GLenum access) {
   GL_SERVICE_LOG("glMapBuffer"
                  << "(" << GLEnums::GetStringEnum(target) << ", "
@@ -11615,7 +10565,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void* DebugGLApi::glMapBufferRangeFn(GLenum target,
                                      GLintptr offset,
                                      GLsizeiptr length,
@@ -11628,7 +10577,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glMatrixLoadfEXTFn(GLenum matrixMode, const GLfloat* m) {
   GL_SERVICE_LOG("glMatrixLoadfEXT"
                  << "(" << GLEnums::GetStringEnum(matrixMode) << ", "
@@ -11636,21 +10584,18 @@
   gl_api_->glMatrixLoadfEXTFn(matrixMode, m);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glMatrixLoadIdentityEXTFn(GLenum matrixMode) {
   GL_SERVICE_LOG("glMatrixLoadIdentityEXT"
                  << "(" << GLEnums::GetStringEnum(matrixMode) << ")");
   gl_api_->glMatrixLoadIdentityEXTFn(matrixMode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glMemoryBarrierEXTFn(GLbitfield barriers) {
   GL_SERVICE_LOG("glMemoryBarrierEXT"
                  << "(" << barriers << ")");
   gl_api_->glMemoryBarrierEXTFn(barriers);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glObjectLabelFn(GLenum identifier,
                                  GLuint name,
                                  GLsizei length,
@@ -11661,7 +10606,6 @@
   gl_api_->glObjectLabelFn(identifier, name, length, label);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glObjectPtrLabelFn(void* ptr,
                                     GLsizei length,
                                     const char* label) {
@@ -11671,7 +10615,6 @@
   gl_api_->glObjectPtrLabelFn(ptr, length, label);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPathCommandsNVFn(GLuint path,
                                     GLsizei numCommands,
                                     const GLubyte* commands,
@@ -11687,7 +10630,6 @@
                               coords);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPathParameterfNVFn(GLuint path,
                                       GLenum pname,
                                       GLfloat value) {
@@ -11697,7 +10639,6 @@
   gl_api_->glPathParameterfNVFn(path, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPathParameteriNVFn(GLuint path, GLenum pname, GLint value) {
   GL_SERVICE_LOG("glPathParameteriNV"
                  << "(" << path << ", " << GLEnums::GetStringEnum(pname) << ", "
@@ -11705,7 +10646,6 @@
   gl_api_->glPathParameteriNVFn(path, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPathStencilFuncNVFn(GLenum func, GLint ref, GLuint mask) {
   GL_SERVICE_LOG("glPathStencilFuncNV"
                  << "(" << GLEnums::GetStringEnum(func) << ", " << ref << ", "
@@ -11713,7 +10653,6 @@
   gl_api_->glPathStencilFuncNVFn(func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPauseTransformFeedbackFn(void) {
   GL_SERVICE_LOG("glPauseTransformFeedback"
                  << "("
@@ -11721,7 +10660,6 @@
   gl_api_->glPauseTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPixelStoreiFn(GLenum pname, GLint param) {
   GL_SERVICE_LOG("glPixelStorei"
                  << "(" << GLEnums::GetStringEnum(pname) << ", " << param
@@ -11729,7 +10667,6 @@
   gl_api_->glPixelStoreiFn(pname, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPointParameteriFn(GLenum pname, GLint param) {
   GL_SERVICE_LOG("glPointParameteri"
                  << "(" << GLEnums::GetStringEnum(pname) << ", " << param
@@ -11737,7 +10674,6 @@
   gl_api_->glPointParameteriFn(pname, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPolygonModeFn(GLenum face, GLenum mode) {
   GL_SERVICE_LOG("glPolygonMode"
                  << "(" << GLEnums::GetStringEnum(face) << ", "
@@ -11745,14 +10681,12 @@
   gl_api_->glPolygonModeFn(face, mode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPolygonOffsetFn(GLfloat factor, GLfloat units) {
   GL_SERVICE_LOG("glPolygonOffset"
                  << "(" << factor << ", " << units << ")");
   gl_api_->glPolygonOffsetFn(factor, units);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPopDebugGroupFn() {
   GL_SERVICE_LOG("glPopDebugGroup"
                  << "("
@@ -11760,7 +10694,6 @@
   gl_api_->glPopDebugGroupFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPopGroupMarkerEXTFn(void) {
   GL_SERVICE_LOG("glPopGroupMarkerEXT"
                  << "("
@@ -11768,14 +10701,12 @@
   gl_api_->glPopGroupMarkerEXTFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPrimitiveRestartIndexFn(GLuint index) {
   GL_SERVICE_LOG("glPrimitiveRestartIndex"
                  << "(" << index << ")");
   gl_api_->glPrimitiveRestartIndexFn(index);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glProgramBinaryFn(GLuint program,
                                    GLenum binaryFormat,
                                    const GLvoid* binary,
@@ -11787,7 +10718,6 @@
   gl_api_->glProgramBinaryFn(program, binaryFormat, binary, length);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glProgramParameteriFn(GLuint program,
                                        GLenum pname,
                                        GLint value) {
@@ -11797,7 +10727,6 @@
   gl_api_->glProgramParameteriFn(program, pname, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glProgramPathFragmentInputGenNVFn(GLuint program,
                                                    GLint location,
                                                    GLenum genMode,
@@ -11811,7 +10740,6 @@
                                              components, coeffs);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPushDebugGroupFn(GLenum source,
                                     GLuint id,
                                     GLsizei length,
@@ -11822,28 +10750,24 @@
   gl_api_->glPushDebugGroupFn(source, id, length, message);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glPushGroupMarkerEXTFn(GLsizei length, const char* marker) {
   GL_SERVICE_LOG("glPushGroupMarkerEXT"
                  << "(" << length << ", " << marker << ")");
   gl_api_->glPushGroupMarkerEXTFn(length, marker);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glQueryCounterFn(GLuint id, GLenum target) {
   GL_SERVICE_LOG("glQueryCounter"
                  << "(" << id << ", " << GLEnums::GetStringEnum(target) << ")");
   gl_api_->glQueryCounterFn(id, target);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glReadBufferFn(GLenum src) {
   GL_SERVICE_LOG("glReadBuffer"
                  << "(" << GLEnums::GetStringEnum(src) << ")");
   gl_api_->glReadBufferFn(src);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glReadnPixelsRobustANGLEFn(GLint x,
                                             GLint y,
                                             GLsizei width,
@@ -11867,7 +10791,6 @@
                                       bufSize, length, columns, rows, data);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glReadPixelsFn(GLint x,
                                 GLint y,
                                 GLsizei width,
@@ -11883,7 +10806,6 @@
   gl_api_->glReadPixelsFn(x, y, width, height, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glReadPixelsRobustANGLEFn(GLint x,
                                            GLint y,
                                            GLsizei width,
@@ -11907,7 +10829,6 @@
                                      length, columns, rows, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glReleaseShaderCompilerFn(void) {
   GL_SERVICE_LOG("glReleaseShaderCompiler"
                  << "("
@@ -11915,7 +10836,6 @@
   gl_api_->glReleaseShaderCompilerFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glRenderbufferStorageEXTFn(GLenum target,
                                             GLenum internalformat,
                                             GLsizei width,
@@ -11927,7 +10847,6 @@
   gl_api_->glRenderbufferStorageEXTFn(target, internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glRenderbufferStorageMultisampleFn(GLenum target,
                                                     GLsizei samples,
                                                     GLenum internalformat,
@@ -11941,7 +10860,6 @@
                                               width, height);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glRenderbufferStorageMultisampleEXTFn(GLenum target,
                                                        GLsizei samples,
                                                        GLenum internalformat,
@@ -11955,14 +10873,12 @@
                                                  internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glRequestExtensionANGLEFn(const char* name) {
   GL_SERVICE_LOG("glRequestExtensionANGLE"
                  << "(" << name << ")");
   gl_api_->glRequestExtensionANGLEFn(name);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glResumeTransformFeedbackFn(void) {
   GL_SERVICE_LOG("glResumeTransformFeedback"
                  << "("
@@ -11970,7 +10886,6 @@
   gl_api_->glResumeTransformFeedbackFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSampleCoverageFn(GLclampf value, GLboolean invert) {
   GL_SERVICE_LOG("glSampleCoverage"
                  << "(" << value << ", " << GLEnums::GetStringBool(invert)
@@ -11978,7 +10893,6 @@
   gl_api_->glSampleCoverageFn(value, invert);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSamplerParameterfFn(GLuint sampler,
                                        GLenum pname,
                                        GLfloat param) {
@@ -11988,7 +10902,6 @@
   gl_api_->glSamplerParameterfFn(sampler, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSamplerParameterfvFn(GLuint sampler,
                                         GLenum pname,
                                         const GLfloat* params) {
@@ -11998,7 +10911,6 @@
   gl_api_->glSamplerParameterfvFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSamplerParameterfvRobustANGLEFn(GLuint sampler,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -12010,7 +10922,6 @@
   gl_api_->glSamplerParameterfvRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSamplerParameteriFn(GLuint sampler,
                                        GLenum pname,
                                        GLint param) {
@@ -12020,7 +10931,6 @@
   gl_api_->glSamplerParameteriFn(sampler, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSamplerParameterIivRobustANGLEFn(GLuint sampler,
                                                     GLenum pname,
                                                     GLsizei bufSize,
@@ -12032,7 +10942,6 @@
   gl_api_->glSamplerParameterIivRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSamplerParameterIuivRobustANGLEFn(GLuint sampler,
                                                      GLenum pname,
                                                      GLsizei bufSize,
@@ -12044,7 +10953,6 @@
   gl_api_->glSamplerParameterIuivRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSamplerParameterivFn(GLuint sampler,
                                         GLenum pname,
                                         const GLint* params) {
@@ -12054,7 +10962,6 @@
   gl_api_->glSamplerParameterivFn(sampler, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSamplerParameterivRobustANGLEFn(GLuint sampler,
                                                    GLenum pname,
                                                    GLsizei bufSize,
@@ -12066,7 +10973,6 @@
   gl_api_->glSamplerParameterivRobustANGLEFn(sampler, pname, bufSize, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glScissorFn(GLint x, GLint y, GLsizei width, GLsizei height) {
   GL_SERVICE_LOG("glScissor"
                  << "(" << x << ", " << y << ", " << width << ", " << height
@@ -12074,14 +10980,12 @@
   gl_api_->glScissorFn(x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSetFenceAPPLEFn(GLuint fence) {
   GL_SERVICE_LOG("glSetFenceAPPLE"
                  << "(" << fence << ")");
   gl_api_->glSetFenceAPPLEFn(fence);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glSetFenceNVFn(GLuint fence, GLenum condition) {
   GL_SERVICE_LOG("glSetFenceNV"
                  << "(" << fence << ", " << GLEnums::GetStringEnum(condition)
@@ -12089,7 +10993,6 @@
   gl_api_->glSetFenceNVFn(fence, condition);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glShaderBinaryFn(GLsizei n,
                                   const GLuint* shaders,
                                   GLenum binaryformat,
@@ -12102,7 +11005,6 @@
   gl_api_->glShaderBinaryFn(n, shaders, binaryformat, binary, length);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glShaderSourceFn(GLuint shader,
                                   GLsizei count,
                                   const char* const* str,
@@ -12129,7 +11031,6 @@
   });
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilFillPathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -12151,7 +11052,6 @@
                                           transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilFillPathNVFn(GLuint path,
                                        GLenum fillMode,
                                        GLuint mask) {
@@ -12161,7 +11061,6 @@
   gl_api_->glStencilFillPathNVFn(path, fillMode, mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilFuncFn(GLenum func, GLint ref, GLuint mask) {
   GL_SERVICE_LOG("glStencilFunc"
                  << "(" << GLEnums::GetStringEnum(func) << ", " << ref << ", "
@@ -12169,7 +11068,6 @@
   gl_api_->glStencilFuncFn(func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilFuncSeparateFn(GLenum face,
                                          GLenum func,
                                          GLint ref,
@@ -12181,21 +11079,18 @@
   gl_api_->glStencilFuncSeparateFn(face, func, ref, mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilMaskFn(GLuint mask) {
   GL_SERVICE_LOG("glStencilMask"
                  << "(" << mask << ")");
   gl_api_->glStencilMaskFn(mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilMaskSeparateFn(GLenum face, GLuint mask) {
   GL_SERVICE_LOG("glStencilMaskSeparate"
                  << "(" << GLEnums::GetStringEnum(face) << ", " << mask << ")");
   gl_api_->glStencilMaskSeparateFn(face, mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilOpFn(GLenum fail, GLenum zfail, GLenum zpass) {
   GL_SERVICE_LOG("glStencilOp"
                  << "(" << GLEnums::GetStringEnum(fail) << ", "
@@ -12204,7 +11099,6 @@
   gl_api_->glStencilOpFn(fail, zfail, zpass);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilOpSeparateFn(GLenum face,
                                        GLenum fail,
                                        GLenum zfail,
@@ -12217,7 +11111,6 @@
   gl_api_->glStencilOpSeparateFn(face, fail, zfail, zpass);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilStrokePathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -12238,7 +11131,6 @@
                                             transformValues);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilStrokePathNVFn(GLuint path,
                                          GLint reference,
                                          GLuint mask) {
@@ -12247,7 +11139,6 @@
   gl_api_->glStencilStrokePathNVFn(path, reference, mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilThenCoverFillPathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -12271,7 +11162,6 @@
       transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilThenCoverFillPathNVFn(GLuint path,
                                                 GLenum fillMode,
                                                 GLuint mask,
@@ -12283,7 +11173,6 @@
   gl_api_->glStencilThenCoverFillPathNVFn(path, fillMode, mask, coverMode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilThenCoverStrokePathInstancedNVFn(
     GLsizei numPaths,
     GLenum pathNameType,
@@ -12306,7 +11195,6 @@
       transformType, transformValues);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glStencilThenCoverStrokePathNVFn(GLuint path,
                                                   GLint reference,
                                                   GLuint mask,
@@ -12317,7 +11205,6 @@
   gl_api_->glStencilThenCoverStrokePathNVFn(path, reference, mask, coverMode);
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glTestFenceAPPLEFn(GLuint fence) {
   GL_SERVICE_LOG("glTestFenceAPPLE"
                  << "(" << fence << ")");
@@ -12326,7 +11213,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glTestFenceNVFn(GLuint fence) {
   GL_SERVICE_LOG("glTestFenceNV"
                  << "(" << fence << ")");
@@ -12335,7 +11221,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexBufferFn(GLenum target,
                                GLenum internalformat,
                                GLuint buffer) {
@@ -12346,7 +11231,6 @@
   gl_api_->glTexBufferFn(target, internalformat, buffer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexBufferRangeFn(GLenum target,
                                     GLenum internalformat,
                                     GLuint buffer,
@@ -12359,7 +11243,6 @@
   gl_api_->glTexBufferRangeFn(target, internalformat, buffer, offset, size);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexImage2DFn(GLenum target,
                                 GLint level,
                                 GLint internalformat,
@@ -12379,7 +11262,6 @@
                           format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexImage2DRobustANGLEFn(GLenum target,
                                            GLint level,
                                            GLint internalformat,
@@ -12401,7 +11283,6 @@
                                      pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexImage3DFn(GLenum target,
                                 GLint level,
                                 GLint internalformat,
@@ -12423,7 +11304,6 @@
                           border, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexImage3DRobustANGLEFn(GLenum target,
                                            GLint level,
                                            GLint internalformat,
@@ -12447,7 +11327,6 @@
                                      bufSize, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexParameterfFn(GLenum target, GLenum pname, GLfloat param) {
   GL_SERVICE_LOG("glTexParameterf"
                  << "(" << GLEnums::GetStringEnum(target) << ", "
@@ -12455,7 +11334,6 @@
   gl_api_->glTexParameterfFn(target, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexParameterfvFn(GLenum target,
                                     GLenum pname,
                                     const GLfloat* params) {
@@ -12466,7 +11344,6 @@
   gl_api_->glTexParameterfvFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexParameterfvRobustANGLEFn(GLenum target,
                                                GLenum pname,
                                                GLsizei bufSize,
@@ -12478,7 +11355,6 @@
   gl_api_->glTexParameterfvRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexParameteriFn(GLenum target, GLenum pname, GLint param) {
   GL_SERVICE_LOG("glTexParameteri"
                  << "(" << GLEnums::GetStringEnum(target) << ", "
@@ -12486,7 +11362,6 @@
   gl_api_->glTexParameteriFn(target, pname, param);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexParameterIivRobustANGLEFn(GLenum target,
                                                 GLenum pname,
                                                 GLsizei bufSize,
@@ -12498,7 +11373,6 @@
   gl_api_->glTexParameterIivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexParameterIuivRobustANGLEFn(GLenum target,
                                                  GLenum pname,
                                                  GLsizei bufSize,
@@ -12510,7 +11384,6 @@
   gl_api_->glTexParameterIuivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexParameterivFn(GLenum target,
                                     GLenum pname,
                                     const GLint* params) {
@@ -12521,7 +11394,6 @@
   gl_api_->glTexParameterivFn(target, pname, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexParameterivRobustANGLEFn(GLenum target,
                                                GLenum pname,
                                                GLsizei bufSize,
@@ -12533,7 +11405,6 @@
   gl_api_->glTexParameterivRobustANGLEFn(target, pname, bufSize, params);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexStorage2DEXTFn(GLenum target,
                                      GLsizei levels,
                                      GLenum internalformat,
@@ -12546,7 +11417,6 @@
   gl_api_->glTexStorage2DEXTFn(target, levels, internalformat, width, height);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexStorage3DFn(GLenum target,
                                   GLsizei levels,
                                   GLenum internalformat,
@@ -12561,7 +11431,6 @@
                             depth);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexSubImage2DFn(GLenum target,
                                    GLint level,
                                    GLint xoffset,
@@ -12581,7 +11450,6 @@
                              format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexSubImage2DRobustANGLEFn(GLenum target,
                                               GLint level,
                                               GLint xoffset,
@@ -12602,7 +11470,6 @@
                                         height, format, type, bufSize, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexSubImage3DFn(GLenum target,
                                    GLint level,
                                    GLint xoffset,
@@ -12625,7 +11492,6 @@
                              height, depth, format, type, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTexSubImage3DRobustANGLEFn(GLenum target,
                                               GLint level,
                                               GLint xoffset,
@@ -12650,7 +11516,6 @@
                                         type, bufSize, pixels);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glTransformFeedbackVaryingsFn(GLuint program,
                                                GLsizei count,
                                                const char* const* varyings,
@@ -12662,14 +11527,12 @@
   gl_api_->glTransformFeedbackVaryingsFn(program, count, varyings, bufferMode);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform1fFn(GLint location, GLfloat x) {
   GL_SERVICE_LOG("glUniform1f"
                  << "(" << location << ", " << x << ")");
   gl_api_->glUniform1fFn(location, x);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform1fvFn(GLint location,
                                 GLsizei count,
                                 const GLfloat* v) {
@@ -12679,14 +11542,12 @@
   gl_api_->glUniform1fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform1iFn(GLint location, GLint x) {
   GL_SERVICE_LOG("glUniform1i"
                  << "(" << location << ", " << x << ")");
   gl_api_->glUniform1iFn(location, x);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform1ivFn(GLint location, GLsizei count, const GLint* v) {
   GL_SERVICE_LOG("glUniform1iv"
                  << "(" << location << ", " << count << ", "
@@ -12694,14 +11555,12 @@
   gl_api_->glUniform1ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform1uiFn(GLint location, GLuint v0) {
   GL_SERVICE_LOG("glUniform1ui"
                  << "(" << location << ", " << v0 << ")");
   gl_api_->glUniform1uiFn(location, v0);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform1uivFn(GLint location,
                                  GLsizei count,
                                  const GLuint* v) {
@@ -12711,14 +11570,12 @@
   gl_api_->glUniform1uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform2fFn(GLint location, GLfloat x, GLfloat y) {
   GL_SERVICE_LOG("glUniform2f"
                  << "(" << location << ", " << x << ", " << y << ")");
   gl_api_->glUniform2fFn(location, x, y);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform2fvFn(GLint location,
                                 GLsizei count,
                                 const GLfloat* v) {
@@ -12728,14 +11585,12 @@
   gl_api_->glUniform2fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform2iFn(GLint location, GLint x, GLint y) {
   GL_SERVICE_LOG("glUniform2i"
                  << "(" << location << ", " << x << ", " << y << ")");
   gl_api_->glUniform2iFn(location, x, y);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform2ivFn(GLint location, GLsizei count, const GLint* v) {
   GL_SERVICE_LOG("glUniform2iv"
                  << "(" << location << ", " << count << ", "
@@ -12743,14 +11598,12 @@
   gl_api_->glUniform2ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform2uiFn(GLint location, GLuint v0, GLuint v1) {
   GL_SERVICE_LOG("glUniform2ui"
                  << "(" << location << ", " << v0 << ", " << v1 << ")");
   gl_api_->glUniform2uiFn(location, v0, v1);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform2uivFn(GLint location,
                                  GLsizei count,
                                  const GLuint* v) {
@@ -12760,7 +11613,6 @@
   gl_api_->glUniform2uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform3fFn(GLint location,
                                GLfloat x,
                                GLfloat y,
@@ -12771,7 +11623,6 @@
   gl_api_->glUniform3fFn(location, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform3fvFn(GLint location,
                                 GLsizei count,
                                 const GLfloat* v) {
@@ -12781,7 +11632,6 @@
   gl_api_->glUniform3fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform3iFn(GLint location, GLint x, GLint y, GLint z) {
   GL_SERVICE_LOG("glUniform3i"
                  << "(" << location << ", " << x << ", " << y << ", " << z
@@ -12789,7 +11639,6 @@
   gl_api_->glUniform3iFn(location, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform3ivFn(GLint location, GLsizei count, const GLint* v) {
   GL_SERVICE_LOG("glUniform3iv"
                  << "(" << location << ", " << count << ", "
@@ -12797,7 +11646,6 @@
   gl_api_->glUniform3ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform3uiFn(GLint location,
                                 GLuint v0,
                                 GLuint v1,
@@ -12808,7 +11656,6 @@
   gl_api_->glUniform3uiFn(location, v0, v1, v2);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform3uivFn(GLint location,
                                  GLsizei count,
                                  const GLuint* v) {
@@ -12818,7 +11665,6 @@
   gl_api_->glUniform3uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform4fFn(GLint location,
                                GLfloat x,
                                GLfloat y,
@@ -12830,7 +11676,6 @@
   gl_api_->glUniform4fFn(location, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform4fvFn(GLint location,
                                 GLsizei count,
                                 const GLfloat* v) {
@@ -12840,7 +11685,6 @@
   gl_api_->glUniform4fvFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform4iFn(GLint location,
                                GLint x,
                                GLint y,
@@ -12852,7 +11696,6 @@
   gl_api_->glUniform4iFn(location, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform4ivFn(GLint location, GLsizei count, const GLint* v) {
   GL_SERVICE_LOG("glUniform4iv"
                  << "(" << location << ", " << count << ", "
@@ -12860,7 +11703,6 @@
   gl_api_->glUniform4ivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform4uiFn(GLint location,
                                 GLuint v0,
                                 GLuint v1,
@@ -12872,7 +11714,6 @@
   gl_api_->glUniform4uiFn(location, v0, v1, v2, v3);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniform4uivFn(GLint location,
                                  GLsizei count,
                                  const GLuint* v) {
@@ -12882,7 +11723,6 @@
   gl_api_->glUniform4uivFn(location, count, v);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformBlockBindingFn(GLuint program,
                                          GLuint uniformBlockIndex,
                                          GLuint uniformBlockBinding) {
@@ -12893,7 +11733,6 @@
                                    uniformBlockBinding);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix2fvFn(GLint location,
                                       GLsizei count,
                                       GLboolean transpose,
@@ -12905,7 +11744,6 @@
   gl_api_->glUniformMatrix2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix2x3fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -12917,7 +11755,6 @@
   gl_api_->glUniformMatrix2x3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix2x4fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -12929,7 +11766,6 @@
   gl_api_->glUniformMatrix2x4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix3fvFn(GLint location,
                                       GLsizei count,
                                       GLboolean transpose,
@@ -12941,7 +11777,6 @@
   gl_api_->glUniformMatrix3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix3x2fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -12953,7 +11788,6 @@
   gl_api_->glUniformMatrix3x2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix3x4fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -12965,7 +11799,6 @@
   gl_api_->glUniformMatrix3x4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix4fvFn(GLint location,
                                       GLsizei count,
                                       GLboolean transpose,
@@ -12977,7 +11810,6 @@
   gl_api_->glUniformMatrix4fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix4x2fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -12989,7 +11821,6 @@
   gl_api_->glUniformMatrix4x2fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUniformMatrix4x3fvFn(GLint location,
                                         GLsizei count,
                                         GLboolean transpose,
@@ -13001,7 +11832,6 @@
   gl_api_->glUniformMatrix4x3fvFn(location, count, transpose, value);
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugGLApi::glUnmapBufferFn(GLenum target) {
   GL_SERVICE_LOG("glUnmapBuffer"
                  << "(" << GLEnums::GetStringEnum(target) << ")");
@@ -13010,28 +11840,24 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glUseProgramFn(GLuint program) {
   GL_SERVICE_LOG("glUseProgram"
                  << "(" << program << ")");
   gl_api_->glUseProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glValidateProgramFn(GLuint program) {
   GL_SERVICE_LOG("glValidateProgram"
                  << "(" << program << ")");
   gl_api_->glValidateProgramFn(program);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttrib1fFn(GLuint indx, GLfloat x) {
   GL_SERVICE_LOG("glVertexAttrib1f"
                  << "(" << indx << ", " << x << ")");
   gl_api_->glVertexAttrib1fFn(indx, x);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttrib1fvFn(GLuint indx, const GLfloat* values) {
   GL_SERVICE_LOG("glVertexAttrib1fv"
                  << "(" << indx << ", " << static_cast<const void*>(values)
@@ -13039,14 +11865,12 @@
   gl_api_->glVertexAttrib1fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttrib2fFn(GLuint indx, GLfloat x, GLfloat y) {
   GL_SERVICE_LOG("glVertexAttrib2f"
                  << "(" << indx << ", " << x << ", " << y << ")");
   gl_api_->glVertexAttrib2fFn(indx, x, y);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttrib2fvFn(GLuint indx, const GLfloat* values) {
   GL_SERVICE_LOG("glVertexAttrib2fv"
                  << "(" << indx << ", " << static_cast<const void*>(values)
@@ -13054,7 +11878,6 @@
   gl_api_->glVertexAttrib2fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttrib3fFn(GLuint indx,
                                     GLfloat x,
                                     GLfloat y,
@@ -13064,7 +11887,6 @@
   gl_api_->glVertexAttrib3fFn(indx, x, y, z);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttrib3fvFn(GLuint indx, const GLfloat* values) {
   GL_SERVICE_LOG("glVertexAttrib3fv"
                  << "(" << indx << ", " << static_cast<const void*>(values)
@@ -13072,7 +11894,6 @@
   gl_api_->glVertexAttrib3fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttrib4fFn(GLuint indx,
                                     GLfloat x,
                                     GLfloat y,
@@ -13084,7 +11905,6 @@
   gl_api_->glVertexAttrib4fFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttrib4fvFn(GLuint indx, const GLfloat* values) {
   GL_SERVICE_LOG("glVertexAttrib4fv"
                  << "(" << indx << ", " << static_cast<const void*>(values)
@@ -13092,14 +11912,12 @@
   gl_api_->glVertexAttrib4fvFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttribDivisorANGLEFn(GLuint index, GLuint divisor) {
   GL_SERVICE_LOG("glVertexAttribDivisorANGLE"
                  << "(" << index << ", " << divisor << ")");
   gl_api_->glVertexAttribDivisorANGLEFn(index, divisor);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttribI4iFn(GLuint indx,
                                      GLint x,
                                      GLint y,
@@ -13111,7 +11929,6 @@
   gl_api_->glVertexAttribI4iFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttribI4ivFn(GLuint indx, const GLint* values) {
   GL_SERVICE_LOG("glVertexAttribI4iv"
                  << "(" << indx << ", " << static_cast<const void*>(values)
@@ -13119,7 +11936,6 @@
   gl_api_->glVertexAttribI4ivFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttribI4uiFn(GLuint indx,
                                       GLuint x,
                                       GLuint y,
@@ -13131,7 +11947,6 @@
   gl_api_->glVertexAttribI4uiFn(indx, x, y, z, w);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttribI4uivFn(GLuint indx, const GLuint* values) {
   GL_SERVICE_LOG("glVertexAttribI4uiv"
                  << "(" << indx << ", " << static_cast<const void*>(values)
@@ -13139,7 +11954,6 @@
   gl_api_->glVertexAttribI4uivFn(indx, values);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttribIPointerFn(GLuint indx,
                                           GLint size,
                                           GLenum type,
@@ -13152,7 +11966,6 @@
   gl_api_->glVertexAttribIPointerFn(indx, size, type, stride, ptr);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glVertexAttribPointerFn(GLuint indx,
                                          GLint size,
                                          GLenum type,
@@ -13167,7 +11980,6 @@
   gl_api_->glVertexAttribPointerFn(indx, size, type, normalized, stride, ptr);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glViewportFn(GLint x, GLint y, GLsizei width, GLsizei height) {
   GL_SERVICE_LOG("glViewport"
                  << "(" << x << ", " << y << ", " << width << ", " << height
@@ -13175,14 +11987,12 @@
   gl_api_->glViewportFn(x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) {
   GL_SERVICE_LOG("glWaitSync"
                  << "(" << sync << ", " << flags << ", " << timeout << ")");
   gl_api_->glWaitSyncFn(sync, flags, timeout);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLApi::glWindowRectanglesEXTFn(GLenum mode,
                                          GLsizei n,
                                          const GLint* box) {
diff --git a/ui/gl/gl_bindings_autogen_glx.cc b/ui/gl/gl_bindings_autogen_glx.cc
index 47284d5..44d5391 100644
--- a/ui/gl/gl_bindings_autogen_glx.cc
+++ b/ui/gl/gl_bindings_autogen_glx.cc
@@ -10,8 +10,6 @@
 
 #include <string>
 
-#include "base/compiler_specific.h"
-#include "base/memory/protected_memory.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
@@ -22,10 +20,7 @@
 
 namespace gl {
 
-// Place the driver in protected memory so that it is set
-// read-only after it is initialized, preventing it from
-// being tampered with. See http://crbug.com/771365.
-PROTECTED_MEMORY_SECTION base::ProtectedMemory<DriverGLX> g_driver_glx;
+DriverGLX g_driver_glx;  // Exists in .bss
 
 void DriverGLX::InitializeStaticBindings() {
   // Ensure struct has been zero-initialized.
@@ -188,7 +183,6 @@
   memset(this, 0, sizeof(*this));
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXBindTexImageEXTFn(Display* dpy,
                                       GLXDrawable drawable,
                                       int buffer,
@@ -196,7 +190,6 @@
   driver_->fn.glXBindTexImageEXTFn(dpy, drawable, buffer, attribList);
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig* GLXApiBase::glXChooseFBConfigFn(Display* dpy,
                                              int screen,
                                              const int* attribList,
@@ -204,14 +197,12 @@
   return driver_->fn.glXChooseFBConfigFn(dpy, screen, attribList, nitems);
 }
 
-DISABLE_CFI_ICALL
 XVisualInfo* GLXApiBase::glXChooseVisualFn(Display* dpy,
                                            int screen,
                                            int* attribList) {
   return driver_->fn.glXChooseVisualFn(dpy, screen, attribList);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXCopyContextFn(Display* dpy,
                                   GLXContext src,
                                   GLXContext dst,
@@ -219,7 +210,6 @@
   driver_->fn.glXCopyContextFn(dpy, src, dst, mask);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXCopySubBufferMESAFn(Display* dpy,
                                         GLXDrawable drawable,
                                         int x,
@@ -229,7 +219,6 @@
   driver_->fn.glXCopySubBufferMESAFn(dpy, drawable, x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 GLXContext GLXApiBase::glXCreateContextFn(Display* dpy,
                                           XVisualInfo* vis,
                                           GLXContext shareList,
@@ -237,7 +226,6 @@
   return driver_->fn.glXCreateContextFn(dpy, vis, shareList, direct);
 }
 
-DISABLE_CFI_ICALL
 GLXContext GLXApiBase::glXCreateContextAttribsARBFn(Display* dpy,
                                                     GLXFBConfig config,
                                                     GLXContext share_context,
@@ -247,14 +235,12 @@
                                                   direct, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 GLXPixmap GLXApiBase::glXCreateGLXPixmapFn(Display* dpy,
                                            XVisualInfo* visual,
                                            Pixmap pixmap) {
   return driver_->fn.glXCreateGLXPixmapFn(dpy, visual, pixmap);
 }
 
-DISABLE_CFI_ICALL
 GLXContext GLXApiBase::glXCreateNewContextFn(Display* dpy,
                                              GLXFBConfig config,
                                              int renderType,
@@ -264,14 +250,12 @@
                                            direct);
 }
 
-DISABLE_CFI_ICALL
 GLXPbuffer GLXApiBase::glXCreatePbufferFn(Display* dpy,
                                           GLXFBConfig config,
                                           const int* attribList) {
   return driver_->fn.glXCreatePbufferFn(dpy, config, attribList);
 }
 
-DISABLE_CFI_ICALL
 GLXPixmap GLXApiBase::glXCreatePixmapFn(Display* dpy,
                                         GLXFBConfig config,
                                         Pixmap pixmap,
@@ -279,7 +263,6 @@
   return driver_->fn.glXCreatePixmapFn(dpy, config, pixmap, attribList);
 }
 
-DISABLE_CFI_ICALL
 GLXWindow GLXApiBase::glXCreateWindowFn(Display* dpy,
                                         GLXFBConfig config,
                                         Window win,
@@ -287,37 +270,30 @@
   return driver_->fn.glXCreateWindowFn(dpy, config, win, attribList);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXDestroyContextFn(Display* dpy, GLXContext ctx) {
   driver_->fn.glXDestroyContextFn(dpy, ctx);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXDestroyGLXPixmapFn(Display* dpy, GLXPixmap pixmap) {
   driver_->fn.glXDestroyGLXPixmapFn(dpy, pixmap);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXDestroyPbufferFn(Display* dpy, GLXPbuffer pbuf) {
   driver_->fn.glXDestroyPbufferFn(dpy, pbuf);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXDestroyPixmapFn(Display* dpy, GLXPixmap pixmap) {
   driver_->fn.glXDestroyPixmapFn(dpy, pixmap);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXDestroyWindowFn(Display* dpy, GLXWindow window) {
   driver_->fn.glXDestroyWindowFn(dpy, window);
 }
 
-DISABLE_CFI_ICALL
 const char* GLXApiBase::glXGetClientStringFn(Display* dpy, int name) {
   return driver_->fn.glXGetClientStringFn(dpy, name);
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXGetConfigFn(Display* dpy,
                                XVisualInfo* visual,
                                int attrib,
@@ -325,27 +301,22 @@
   return driver_->fn.glXGetConfigFn(dpy, visual, attrib, value);
 }
 
-DISABLE_CFI_ICALL
 GLXContext GLXApiBase::glXGetCurrentContextFn(void) {
   return driver_->fn.glXGetCurrentContextFn();
 }
 
-DISABLE_CFI_ICALL
 Display* GLXApiBase::glXGetCurrentDisplayFn(void) {
   return driver_->fn.glXGetCurrentDisplayFn();
 }
 
-DISABLE_CFI_ICALL
 GLXDrawable GLXApiBase::glXGetCurrentDrawableFn(void) {
   return driver_->fn.glXGetCurrentDrawableFn();
 }
 
-DISABLE_CFI_ICALL
 GLXDrawable GLXApiBase::glXGetCurrentReadDrawableFn(void) {
   return driver_->fn.glXGetCurrentReadDrawableFn();
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXGetFBConfigAttribFn(Display* dpy,
                                        GLXFBConfig config,
                                        int attribute,
@@ -353,21 +324,18 @@
   return driver_->fn.glXGetFBConfigAttribFn(dpy, config, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig GLXApiBase::glXGetFBConfigFromVisualSGIXFn(
     Display* dpy,
     XVisualInfo* visualInfo) {
   return driver_->fn.glXGetFBConfigFromVisualSGIXFn(dpy, visualInfo);
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig* GLXApiBase::glXGetFBConfigsFn(Display* dpy,
                                            int screen,
                                            int* nelements) {
   return driver_->fn.glXGetFBConfigsFn(dpy, screen, nelements);
 }
 
-DISABLE_CFI_ICALL
 bool GLXApiBase::glXGetMscRateOMLFn(Display* dpy,
                                     GLXDrawable drawable,
                                     int32_t* numerator,
@@ -375,14 +343,12 @@
   return driver_->fn.glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXGetSelectedEventFn(Display* dpy,
                                        GLXDrawable drawable,
                                        unsigned long* mask) {
   driver_->fn.glXGetSelectedEventFn(dpy, drawable, mask);
 }
 
-DISABLE_CFI_ICALL
 bool GLXApiBase::glXGetSyncValuesOMLFn(Display* dpy,
                                        GLXDrawable drawable,
                                        int64_t* ust,
@@ -391,18 +357,15 @@
   return driver_->fn.glXGetSyncValuesOMLFn(dpy, drawable, ust, msc, sbc);
 }
 
-DISABLE_CFI_ICALL
 XVisualInfo* GLXApiBase::glXGetVisualFromFBConfigFn(Display* dpy,
                                                     GLXFBConfig config) {
   return driver_->fn.glXGetVisualFromFBConfigFn(dpy, config);
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXIsDirectFn(Display* dpy, GLXContext ctx) {
   return driver_->fn.glXIsDirectFn(dpy, ctx);
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXMakeContextCurrentFn(Display* dpy,
                                         GLXDrawable draw,
                                         GLXDrawable read,
@@ -410,14 +373,12 @@
   return driver_->fn.glXMakeContextCurrentFn(dpy, draw, read, ctx);
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXMakeCurrentFn(Display* dpy,
                                  GLXDrawable drawable,
                                  GLXContext ctx) {
   return driver_->fn.glXMakeCurrentFn(dpy, drawable, ctx);
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXQueryContextFn(Display* dpy,
                                   GLXContext ctx,
                                   int attribute,
@@ -425,7 +386,6 @@
   return driver_->fn.glXQueryContextFn(dpy, ctx, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXQueryDrawableFn(Display* dpy,
                                     GLXDrawable draw,
                                     int attribute,
@@ -433,82 +393,68 @@
   driver_->fn.glXQueryDrawableFn(dpy, draw, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXQueryExtensionFn(Display* dpy, int* errorb, int* event) {
   return driver_->fn.glXQueryExtensionFn(dpy, errorb, event);
 }
 
-DISABLE_CFI_ICALL
 const char* GLXApiBase::glXQueryExtensionsStringFn(Display* dpy, int screen) {
   return driver_->fn.glXQueryExtensionsStringFn(dpy, screen);
 }
 
-DISABLE_CFI_ICALL
 const char* GLXApiBase::glXQueryServerStringFn(Display* dpy,
                                                int screen,
                                                int name) {
   return driver_->fn.glXQueryServerStringFn(dpy, screen, name);
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXQueryVersionFn(Display* dpy, int* maj, int* min) {
   return driver_->fn.glXQueryVersionFn(dpy, maj, min);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXReleaseTexImageEXTFn(Display* dpy,
                                          GLXDrawable drawable,
                                          int buffer) {
   driver_->fn.glXReleaseTexImageEXTFn(dpy, drawable, buffer);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXSelectEventFn(Display* dpy,
                                   GLXDrawable drawable,
                                   unsigned long mask) {
   driver_->fn.glXSelectEventFn(dpy, drawable, mask);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXSwapBuffersFn(Display* dpy, GLXDrawable drawable) {
   driver_->fn.glXSwapBuffersFn(dpy, drawable);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXSwapIntervalEXTFn(Display* dpy,
                                       GLXDrawable drawable,
                                       int interval) {
   driver_->fn.glXSwapIntervalEXTFn(dpy, drawable, interval);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXSwapIntervalMESAFn(unsigned int interval) {
   driver_->fn.glXSwapIntervalMESAFn(interval);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXUseXFontFn(Font font, int first, int count, int list) {
   driver_->fn.glXUseXFontFn(font, first, count, list);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXWaitGLFn(void) {
   driver_->fn.glXWaitGLFn();
 }
 
-DISABLE_CFI_ICALL
 int GLXApiBase::glXWaitVideoSyncSGIFn(int divisor,
                                       int remainder,
                                       unsigned int* count) {
   return driver_->fn.glXWaitVideoSyncSGIFn(divisor, remainder, count);
 }
 
-DISABLE_CFI_ICALL
 void GLXApiBase::glXWaitXFn(void) {
   driver_->fn.glXWaitXFn();
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXBindTexImageEXTFn(Display* dpy,
                                        GLXDrawable drawable,
                                        int buffer,
@@ -517,7 +463,6 @@
   glx_api_->glXBindTexImageEXTFn(dpy, drawable, buffer, attribList);
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig* TraceGLXApi::glXChooseFBConfigFn(Display* dpy,
                                               int screen,
                                               const int* attribList,
@@ -526,7 +471,6 @@
   return glx_api_->glXChooseFBConfigFn(dpy, screen, attribList, nitems);
 }
 
-DISABLE_CFI_ICALL
 XVisualInfo* TraceGLXApi::glXChooseVisualFn(Display* dpy,
                                             int screen,
                                             int* attribList) {
@@ -534,7 +478,6 @@
   return glx_api_->glXChooseVisualFn(dpy, screen, attribList);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXCopyContextFn(Display* dpy,
                                    GLXContext src,
                                    GLXContext dst,
@@ -543,7 +486,6 @@
   glx_api_->glXCopyContextFn(dpy, src, dst, mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXCopySubBufferMESAFn(Display* dpy,
                                          GLXDrawable drawable,
                                          int x,
@@ -554,7 +496,6 @@
   glx_api_->glXCopySubBufferMESAFn(dpy, drawable, x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 GLXContext TraceGLXApi::glXCreateContextFn(Display* dpy,
                                            XVisualInfo* vis,
                                            GLXContext shareList,
@@ -563,7 +504,6 @@
   return glx_api_->glXCreateContextFn(dpy, vis, shareList, direct);
 }
 
-DISABLE_CFI_ICALL
 GLXContext TraceGLXApi::glXCreateContextAttribsARBFn(Display* dpy,
                                                      GLXFBConfig config,
                                                      GLXContext share_context,
@@ -574,7 +514,6 @@
                                                 direct, attrib_list);
 }
 
-DISABLE_CFI_ICALL
 GLXPixmap TraceGLXApi::glXCreateGLXPixmapFn(Display* dpy,
                                             XVisualInfo* visual,
                                             Pixmap pixmap) {
@@ -582,7 +521,6 @@
   return glx_api_->glXCreateGLXPixmapFn(dpy, visual, pixmap);
 }
 
-DISABLE_CFI_ICALL
 GLXContext TraceGLXApi::glXCreateNewContextFn(Display* dpy,
                                               GLXFBConfig config,
                                               int renderType,
@@ -593,7 +531,6 @@
                                          direct);
 }
 
-DISABLE_CFI_ICALL
 GLXPbuffer TraceGLXApi::glXCreatePbufferFn(Display* dpy,
                                            GLXFBConfig config,
                                            const int* attribList) {
@@ -601,7 +538,6 @@
   return glx_api_->glXCreatePbufferFn(dpy, config, attribList);
 }
 
-DISABLE_CFI_ICALL
 GLXPixmap TraceGLXApi::glXCreatePixmapFn(Display* dpy,
                                          GLXFBConfig config,
                                          Pixmap pixmap,
@@ -610,7 +546,6 @@
   return glx_api_->glXCreatePixmapFn(dpy, config, pixmap, attribList);
 }
 
-DISABLE_CFI_ICALL
 GLXWindow TraceGLXApi::glXCreateWindowFn(Display* dpy,
                                          GLXFBConfig config,
                                          Window win,
@@ -619,43 +554,36 @@
   return glx_api_->glXCreateWindowFn(dpy, config, win, attribList);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXDestroyContextFn(Display* dpy, GLXContext ctx) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXDestroyContext")
   glx_api_->glXDestroyContextFn(dpy, ctx);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXDestroyGLXPixmapFn(Display* dpy, GLXPixmap pixmap) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXDestroyGLXPixmap")
   glx_api_->glXDestroyGLXPixmapFn(dpy, pixmap);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXDestroyPbufferFn(Display* dpy, GLXPbuffer pbuf) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXDestroyPbuffer")
   glx_api_->glXDestroyPbufferFn(dpy, pbuf);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXDestroyPixmapFn(Display* dpy, GLXPixmap pixmap) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXDestroyPixmap")
   glx_api_->glXDestroyPixmapFn(dpy, pixmap);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXDestroyWindowFn(Display* dpy, GLXWindow window) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXDestroyWindow")
   glx_api_->glXDestroyWindowFn(dpy, window);
 }
 
-DISABLE_CFI_ICALL
 const char* TraceGLXApi::glXGetClientStringFn(Display* dpy, int name) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetClientString")
   return glx_api_->glXGetClientStringFn(dpy, name);
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXGetConfigFn(Display* dpy,
                                 XVisualInfo* visual,
                                 int attrib,
@@ -664,31 +592,26 @@
   return glx_api_->glXGetConfigFn(dpy, visual, attrib, value);
 }
 
-DISABLE_CFI_ICALL
 GLXContext TraceGLXApi::glXGetCurrentContextFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetCurrentContext")
   return glx_api_->glXGetCurrentContextFn();
 }
 
-DISABLE_CFI_ICALL
 Display* TraceGLXApi::glXGetCurrentDisplayFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetCurrentDisplay")
   return glx_api_->glXGetCurrentDisplayFn();
 }
 
-DISABLE_CFI_ICALL
 GLXDrawable TraceGLXApi::glXGetCurrentDrawableFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetCurrentDrawable")
   return glx_api_->glXGetCurrentDrawableFn();
 }
 
-DISABLE_CFI_ICALL
 GLXDrawable TraceGLXApi::glXGetCurrentReadDrawableFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetCurrentReadDrawable")
   return glx_api_->glXGetCurrentReadDrawableFn();
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXGetFBConfigAttribFn(Display* dpy,
                                         GLXFBConfig config,
                                         int attribute,
@@ -697,7 +620,6 @@
   return glx_api_->glXGetFBConfigAttribFn(dpy, config, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig TraceGLXApi::glXGetFBConfigFromVisualSGIXFn(
     Display* dpy,
     XVisualInfo* visualInfo) {
@@ -706,7 +628,6 @@
   return glx_api_->glXGetFBConfigFromVisualSGIXFn(dpy, visualInfo);
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig* TraceGLXApi::glXGetFBConfigsFn(Display* dpy,
                                             int screen,
                                             int* nelements) {
@@ -714,7 +635,6 @@
   return glx_api_->glXGetFBConfigsFn(dpy, screen, nelements);
 }
 
-DISABLE_CFI_ICALL
 bool TraceGLXApi::glXGetMscRateOMLFn(Display* dpy,
                                      GLXDrawable drawable,
                                      int32_t* numerator,
@@ -723,7 +643,6 @@
   return glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXGetSelectedEventFn(Display* dpy,
                                         GLXDrawable drawable,
                                         unsigned long* mask) {
@@ -731,7 +650,6 @@
   glx_api_->glXGetSelectedEventFn(dpy, drawable, mask);
 }
 
-DISABLE_CFI_ICALL
 bool TraceGLXApi::glXGetSyncValuesOMLFn(Display* dpy,
                                         GLXDrawable drawable,
                                         int64_t* ust,
@@ -741,20 +659,17 @@
   return glx_api_->glXGetSyncValuesOMLFn(dpy, drawable, ust, msc, sbc);
 }
 
-DISABLE_CFI_ICALL
 XVisualInfo* TraceGLXApi::glXGetVisualFromFBConfigFn(Display* dpy,
                                                      GLXFBConfig config) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetVisualFromFBConfig")
   return glx_api_->glXGetVisualFromFBConfigFn(dpy, config);
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXIsDirectFn(Display* dpy, GLXContext ctx) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXIsDirect")
   return glx_api_->glXIsDirectFn(dpy, ctx);
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXMakeContextCurrentFn(Display* dpy,
                                          GLXDrawable draw,
                                          GLXDrawable read,
@@ -763,7 +678,6 @@
   return glx_api_->glXMakeContextCurrentFn(dpy, draw, read, ctx);
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXMakeCurrentFn(Display* dpy,
                                   GLXDrawable drawable,
                                   GLXContext ctx) {
@@ -771,7 +685,6 @@
   return glx_api_->glXMakeCurrentFn(dpy, drawable, ctx);
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXQueryContextFn(Display* dpy,
                                    GLXContext ctx,
                                    int attribute,
@@ -780,7 +693,6 @@
   return glx_api_->glXQueryContextFn(dpy, ctx, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXQueryDrawableFn(Display* dpy,
                                      GLXDrawable draw,
                                      int attribute,
@@ -789,19 +701,16 @@
   glx_api_->glXQueryDrawableFn(dpy, draw, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXQueryExtensionFn(Display* dpy, int* errorb, int* event) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXQueryExtension")
   return glx_api_->glXQueryExtensionFn(dpy, errorb, event);
 }
 
-DISABLE_CFI_ICALL
 const char* TraceGLXApi::glXQueryExtensionsStringFn(Display* dpy, int screen) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXQueryExtensionsString")
   return glx_api_->glXQueryExtensionsStringFn(dpy, screen);
 }
 
-DISABLE_CFI_ICALL
 const char* TraceGLXApi::glXQueryServerStringFn(Display* dpy,
                                                 int screen,
                                                 int name) {
@@ -809,13 +718,11 @@
   return glx_api_->glXQueryServerStringFn(dpy, screen, name);
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXQueryVersionFn(Display* dpy, int* maj, int* min) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXQueryVersion")
   return glx_api_->glXQueryVersionFn(dpy, maj, min);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXReleaseTexImageEXTFn(Display* dpy,
                                           GLXDrawable drawable,
                                           int buffer) {
@@ -823,7 +730,6 @@
   glx_api_->glXReleaseTexImageEXTFn(dpy, drawable, buffer);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXSelectEventFn(Display* dpy,
                                    GLXDrawable drawable,
                                    unsigned long mask) {
@@ -831,13 +737,11 @@
   glx_api_->glXSelectEventFn(dpy, drawable, mask);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXSwapBuffersFn(Display* dpy, GLXDrawable drawable) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXSwapBuffers")
   glx_api_->glXSwapBuffersFn(dpy, drawable);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXSwapIntervalEXTFn(Display* dpy,
                                        GLXDrawable drawable,
                                        int interval) {
@@ -845,25 +749,21 @@
   glx_api_->glXSwapIntervalEXTFn(dpy, drawable, interval);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXSwapIntervalMESAFn(unsigned int interval) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXSwapIntervalMESA")
   glx_api_->glXSwapIntervalMESAFn(interval);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXUseXFontFn(Font font, int first, int count, int list) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXUseXFont")
   glx_api_->glXUseXFontFn(font, first, count, list);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXWaitGLFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXWaitGL")
   glx_api_->glXWaitGLFn();
 }
 
-DISABLE_CFI_ICALL
 int TraceGLXApi::glXWaitVideoSyncSGIFn(int divisor,
                                        int remainder,
                                        unsigned int* count) {
@@ -871,13 +771,11 @@
   return glx_api_->glXWaitVideoSyncSGIFn(divisor, remainder, count);
 }
 
-DISABLE_CFI_ICALL
 void TraceGLXApi::glXWaitXFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXWaitX")
   glx_api_->glXWaitXFn();
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXBindTexImageEXTFn(Display* dpy,
                                        GLXDrawable drawable,
                                        int buffer,
@@ -889,7 +787,6 @@
   glx_api_->glXBindTexImageEXTFn(dpy, drawable, buffer, attribList);
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig* DebugGLXApi::glXChooseFBConfigFn(Display* dpy,
                                               int screen,
                                               const int* attribList,
@@ -904,7 +801,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 XVisualInfo* DebugGLXApi::glXChooseVisualFn(Display* dpy,
                                             int screen,
                                             int* attribList) {
@@ -916,7 +812,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXCopyContextFn(Display* dpy,
                                    GLXContext src,
                                    GLXContext dst,
@@ -927,7 +822,6 @@
   glx_api_->glXCopyContextFn(dpy, src, dst, mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXCopySubBufferMESAFn(Display* dpy,
                                          GLXDrawable drawable,
                                          int x,
@@ -941,7 +835,6 @@
   glx_api_->glXCopySubBufferMESAFn(dpy, drawable, x, y, width, height);
 }
 
-DISABLE_CFI_ICALL
 GLXContext DebugGLXApi::glXCreateContextFn(Display* dpy,
                                            XVisualInfo* vis,
                                            GLXContext shareList,
@@ -955,7 +848,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXContext DebugGLXApi::glXCreateContextAttribsARBFn(Display* dpy,
                                                      GLXFBConfig config,
                                                      GLXContext share_context,
@@ -971,7 +863,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXPixmap DebugGLXApi::glXCreateGLXPixmapFn(Display* dpy,
                                             XVisualInfo* visual,
                                             Pixmap pixmap) {
@@ -983,7 +874,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXContext DebugGLXApi::glXCreateNewContextFn(Display* dpy,
                                               GLXFBConfig config,
                                               int renderType,
@@ -999,7 +889,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXPbuffer DebugGLXApi::glXCreatePbufferFn(Display* dpy,
                                            GLXFBConfig config,
                                            const int* attribList) {
@@ -1011,7 +900,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXPixmap DebugGLXApi::glXCreatePixmapFn(Display* dpy,
                                          GLXFBConfig config,
                                          Pixmap pixmap,
@@ -1026,7 +914,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXWindow DebugGLXApi::glXCreateWindowFn(Display* dpy,
                                          GLXFBConfig config,
                                          Window win,
@@ -1040,14 +927,12 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXDestroyContextFn(Display* dpy, GLXContext ctx) {
   GL_SERVICE_LOG("glXDestroyContext"
                  << "(" << static_cast<const void*>(dpy) << ", " << ctx << ")");
   glx_api_->glXDestroyContextFn(dpy, ctx);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXDestroyGLXPixmapFn(Display* dpy, GLXPixmap pixmap) {
   GL_SERVICE_LOG("glXDestroyGLXPixmap"
                  << "(" << static_cast<const void*>(dpy) << ", " << pixmap
@@ -1055,7 +940,6 @@
   glx_api_->glXDestroyGLXPixmapFn(dpy, pixmap);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXDestroyPbufferFn(Display* dpy, GLXPbuffer pbuf) {
   GL_SERVICE_LOG("glXDestroyPbuffer"
                  << "(" << static_cast<const void*>(dpy) << ", " << pbuf
@@ -1063,7 +947,6 @@
   glx_api_->glXDestroyPbufferFn(dpy, pbuf);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXDestroyPixmapFn(Display* dpy, GLXPixmap pixmap) {
   GL_SERVICE_LOG("glXDestroyPixmap"
                  << "(" << static_cast<const void*>(dpy) << ", " << pixmap
@@ -1071,7 +954,6 @@
   glx_api_->glXDestroyPixmapFn(dpy, pixmap);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXDestroyWindowFn(Display* dpy, GLXWindow window) {
   GL_SERVICE_LOG("glXDestroyWindow"
                  << "(" << static_cast<const void*>(dpy) << ", " << window
@@ -1079,7 +961,6 @@
   glx_api_->glXDestroyWindowFn(dpy, window);
 }
 
-DISABLE_CFI_ICALL
 const char* DebugGLXApi::glXGetClientStringFn(Display* dpy, int name) {
   GL_SERVICE_LOG("glXGetClientString"
                  << "(" << static_cast<const void*>(dpy) << ", " << name
@@ -1089,7 +970,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXGetConfigFn(Display* dpy,
                                 XVisualInfo* visual,
                                 int attrib,
@@ -1103,7 +983,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXContext DebugGLXApi::glXGetCurrentContextFn(void) {
   GL_SERVICE_LOG("glXGetCurrentContext"
                  << "("
@@ -1113,7 +992,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 Display* DebugGLXApi::glXGetCurrentDisplayFn(void) {
   GL_SERVICE_LOG("glXGetCurrentDisplay"
                  << "("
@@ -1123,7 +1001,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXDrawable DebugGLXApi::glXGetCurrentDrawableFn(void) {
   GL_SERVICE_LOG("glXGetCurrentDrawable"
                  << "("
@@ -1133,7 +1010,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXDrawable DebugGLXApi::glXGetCurrentReadDrawableFn(void) {
   GL_SERVICE_LOG("glXGetCurrentReadDrawable"
                  << "("
@@ -1143,7 +1019,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXGetFBConfigAttribFn(Display* dpy,
                                         GLXFBConfig config,
                                         int attribute,
@@ -1157,7 +1032,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig DebugGLXApi::glXGetFBConfigFromVisualSGIXFn(
     Display* dpy,
     XVisualInfo* visualInfo) {
@@ -1170,7 +1044,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLXFBConfig* DebugGLXApi::glXGetFBConfigsFn(Display* dpy,
                                             int screen,
                                             int* nelements) {
@@ -1182,7 +1055,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 bool DebugGLXApi::glXGetMscRateOMLFn(Display* dpy,
                                      GLXDrawable drawable,
                                      int32_t* numerator,
@@ -1197,7 +1069,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXGetSelectedEventFn(Display* dpy,
                                         GLXDrawable drawable,
                                         unsigned long* mask) {
@@ -1207,7 +1078,6 @@
   glx_api_->glXGetSelectedEventFn(dpy, drawable, mask);
 }
 
-DISABLE_CFI_ICALL
 bool DebugGLXApi::glXGetSyncValuesOMLFn(Display* dpy,
                                         GLXDrawable drawable,
                                         int64_t* ust,
@@ -1223,7 +1093,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 XVisualInfo* DebugGLXApi::glXGetVisualFromFBConfigFn(Display* dpy,
                                                      GLXFBConfig config) {
   GL_SERVICE_LOG("glXGetVisualFromFBConfig"
@@ -1234,7 +1103,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXIsDirectFn(Display* dpy, GLXContext ctx) {
   GL_SERVICE_LOG("glXIsDirect"
                  << "(" << static_cast<const void*>(dpy) << ", " << ctx << ")");
@@ -1243,7 +1111,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXMakeContextCurrentFn(Display* dpy,
                                          GLXDrawable draw,
                                          GLXDrawable read,
@@ -1256,7 +1123,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXMakeCurrentFn(Display* dpy,
                                   GLXDrawable drawable,
                                   GLXContext ctx) {
@@ -1268,7 +1134,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXQueryContextFn(Display* dpy,
                                    GLXContext ctx,
                                    int attribute,
@@ -1282,7 +1147,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXQueryDrawableFn(Display* dpy,
                                      GLXDrawable draw,
                                      int attribute,
@@ -1294,7 +1158,6 @@
   glx_api_->glXQueryDrawableFn(dpy, draw, attribute, value);
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXQueryExtensionFn(Display* dpy, int* errorb, int* event) {
   GL_SERVICE_LOG("glXQueryExtension"
                  << "(" << static_cast<const void*>(dpy) << ", "
@@ -1305,7 +1168,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 const char* DebugGLXApi::glXQueryExtensionsStringFn(Display* dpy, int screen) {
   GL_SERVICE_LOG("glXQueryExtensionsString"
                  << "(" << static_cast<const void*>(dpy) << ", " << screen
@@ -1315,7 +1177,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 const char* DebugGLXApi::glXQueryServerStringFn(Display* dpy,
                                                 int screen,
                                                 int name) {
@@ -1327,7 +1188,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXQueryVersionFn(Display* dpy, int* maj, int* min) {
   GL_SERVICE_LOG("glXQueryVersion"
                  << "(" << static_cast<const void*>(dpy) << ", "
@@ -1338,7 +1198,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXReleaseTexImageEXTFn(Display* dpy,
                                           GLXDrawable drawable,
                                           int buffer) {
@@ -1348,7 +1207,6 @@
   glx_api_->glXReleaseTexImageEXTFn(dpy, drawable, buffer);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXSelectEventFn(Display* dpy,
                                    GLXDrawable drawable,
                                    unsigned long mask) {
@@ -1358,7 +1216,6 @@
   glx_api_->glXSelectEventFn(dpy, drawable, mask);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXSwapBuffersFn(Display* dpy, GLXDrawable drawable) {
   GL_SERVICE_LOG("glXSwapBuffers"
                  << "(" << static_cast<const void*>(dpy) << ", " << drawable
@@ -1366,7 +1223,6 @@
   glx_api_->glXSwapBuffersFn(dpy, drawable);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXSwapIntervalEXTFn(Display* dpy,
                                        GLXDrawable drawable,
                                        int interval) {
@@ -1376,14 +1232,12 @@
   glx_api_->glXSwapIntervalEXTFn(dpy, drawable, interval);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXSwapIntervalMESAFn(unsigned int interval) {
   GL_SERVICE_LOG("glXSwapIntervalMESA"
                  << "(" << interval << ")");
   glx_api_->glXSwapIntervalMESAFn(interval);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXUseXFontFn(Font font, int first, int count, int list) {
   GL_SERVICE_LOG("glXUseXFont"
                  << "(" << font << ", " << first << ", " << count << ", "
@@ -1391,7 +1245,6 @@
   glx_api_->glXUseXFontFn(font, first, count, list);
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXWaitGLFn(void) {
   GL_SERVICE_LOG("glXWaitGL"
                  << "("
@@ -1399,7 +1252,6 @@
   glx_api_->glXWaitGLFn();
 }
 
-DISABLE_CFI_ICALL
 int DebugGLXApi::glXWaitVideoSyncSGIFn(int divisor,
                                        int remainder,
                                        unsigned int* count) {
@@ -1411,7 +1263,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugGLXApi::glXWaitXFn(void) {
   GL_SERVICE_LOG("glXWaitX"
                  << "("
diff --git a/ui/gl/gl_bindings_autogen_osmesa.cc b/ui/gl/gl_bindings_autogen_osmesa.cc
index 22bbbd2..75bd1e9 100644
--- a/ui/gl/gl_bindings_autogen_osmesa.cc
+++ b/ui/gl/gl_bindings_autogen_osmesa.cc
@@ -10,8 +10,6 @@
 
 #include <string>
 
-#include "base/compiler_specific.h"
-#include "base/memory/protected_memory.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
@@ -22,10 +20,7 @@
 
 namespace gl {
 
-// Place the driver in protected memory so that it is set
-// read-only after it is initialized, preventing it from
-// being tampered with. See http://crbug.com/771365.
-PROTECTED_MEMORY_SECTION base::ProtectedMemory<DriverOSMESA> g_driver_osmesa;
+DriverOSMESA g_driver_osmesa;  // Exists in .bss
 
 void DriverOSMESA::InitializeStaticBindings() {
   // Ensure struct has been zero-initialized.
@@ -67,18 +62,15 @@
   memset(this, 0, sizeof(*this));
 }
 
-DISABLE_CFI_ICALL
 void OSMESAApiBase::OSMesaColorClampFn(GLboolean enable) {
   driver_->fn.OSMesaColorClampFn(enable);
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext OSMESAApiBase::OSMesaCreateContextFn(GLenum format,
                                                    OSMesaContext sharelist) {
   return driver_->fn.OSMesaCreateContextFn(format, sharelist);
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext OSMESAApiBase::OSMesaCreateContextExtFn(GLenum format,
                                                       GLint depthBits,
                                                       GLint stencilBits,
@@ -88,12 +80,10 @@
                                               accumBits, sharelist);
 }
 
-DISABLE_CFI_ICALL
 void OSMESAApiBase::OSMesaDestroyContextFn(OSMesaContext ctx) {
   driver_->fn.OSMesaDestroyContextFn(ctx);
 }
 
-DISABLE_CFI_ICALL
 GLboolean OSMESAApiBase::OSMesaGetColorBufferFn(OSMesaContext c,
                                                 GLint* width,
                                                 GLint* height,
@@ -102,12 +92,10 @@
   return driver_->fn.OSMesaGetColorBufferFn(c, width, height, format, buffer);
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext OSMESAApiBase::OSMesaGetCurrentContextFn(void) {
   return driver_->fn.OSMesaGetCurrentContextFn();
 }
 
-DISABLE_CFI_ICALL
 GLboolean OSMESAApiBase::OSMesaGetDepthBufferFn(OSMesaContext c,
                                                 GLint* width,
                                                 GLint* height,
@@ -117,17 +105,14 @@
                                             buffer);
 }
 
-DISABLE_CFI_ICALL
 void OSMESAApiBase::OSMesaGetIntegervFn(GLint pname, GLint* value) {
   driver_->fn.OSMesaGetIntegervFn(pname, value);
 }
 
-DISABLE_CFI_ICALL
 OSMESAproc OSMESAApiBase::OSMesaGetProcAddressFn(const char* funcName) {
   return driver_->fn.OSMesaGetProcAddressFn(funcName);
 }
 
-DISABLE_CFI_ICALL
 GLboolean OSMESAApiBase::OSMesaMakeCurrentFn(OSMesaContext ctx,
                                              void* buffer,
                                              GLenum type,
@@ -136,25 +121,21 @@
   return driver_->fn.OSMesaMakeCurrentFn(ctx, buffer, type, width, height);
 }
 
-DISABLE_CFI_ICALL
 void OSMESAApiBase::OSMesaPixelStoreFn(GLint pname, GLint value) {
   driver_->fn.OSMesaPixelStoreFn(pname, value);
 }
 
-DISABLE_CFI_ICALL
 void TraceOSMESAApi::OSMesaColorClampFn(GLboolean enable) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaColorClamp")
   osmesa_api_->OSMesaColorClampFn(enable);
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext TraceOSMESAApi::OSMesaCreateContextFn(GLenum format,
                                                     OSMesaContext sharelist) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaCreateContext")
   return osmesa_api_->OSMesaCreateContextFn(format, sharelist);
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext TraceOSMESAApi::OSMesaCreateContextExtFn(
     GLenum format,
     GLint depthBits,
@@ -166,13 +147,11 @@
                                                accumBits, sharelist);
 }
 
-DISABLE_CFI_ICALL
 void TraceOSMESAApi::OSMesaDestroyContextFn(OSMesaContext ctx) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaDestroyContext")
   osmesa_api_->OSMesaDestroyContextFn(ctx);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceOSMESAApi::OSMesaGetColorBufferFn(OSMesaContext c,
                                                  GLint* width,
                                                  GLint* height,
@@ -182,13 +161,11 @@
   return osmesa_api_->OSMesaGetColorBufferFn(c, width, height, format, buffer);
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext TraceOSMESAApi::OSMesaGetCurrentContextFn(void) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaGetCurrentContext")
   return osmesa_api_->OSMesaGetCurrentContextFn();
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceOSMESAApi::OSMesaGetDepthBufferFn(OSMesaContext c,
                                                  GLint* width,
                                                  GLint* height,
@@ -199,19 +176,16 @@
                                              buffer);
 }
 
-DISABLE_CFI_ICALL
 void TraceOSMESAApi::OSMesaGetIntegervFn(GLint pname, GLint* value) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaGetIntegerv")
   osmesa_api_->OSMesaGetIntegervFn(pname, value);
 }
 
-DISABLE_CFI_ICALL
 OSMESAproc TraceOSMESAApi::OSMesaGetProcAddressFn(const char* funcName) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaGetProcAddress")
   return osmesa_api_->OSMesaGetProcAddressFn(funcName);
 }
 
-DISABLE_CFI_ICALL
 GLboolean TraceOSMESAApi::OSMesaMakeCurrentFn(OSMesaContext ctx,
                                               void* buffer,
                                               GLenum type,
@@ -221,20 +195,17 @@
   return osmesa_api_->OSMesaMakeCurrentFn(ctx, buffer, type, width, height);
 }
 
-DISABLE_CFI_ICALL
 void TraceOSMESAApi::OSMesaPixelStoreFn(GLint pname, GLint value) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::OSMesaPixelStore")
   osmesa_api_->OSMesaPixelStoreFn(pname, value);
 }
 
-DISABLE_CFI_ICALL
 void DebugOSMESAApi::OSMesaColorClampFn(GLboolean enable) {
   GL_SERVICE_LOG("OSMesaColorClamp"
                  << "(" << GLEnums::GetStringBool(enable) << ")");
   osmesa_api_->OSMesaColorClampFn(enable);
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext DebugOSMESAApi::OSMesaCreateContextFn(GLenum format,
                                                     OSMesaContext sharelist) {
   GL_SERVICE_LOG("OSMesaCreateContext"
@@ -245,7 +216,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext DebugOSMESAApi::OSMesaCreateContextExtFn(
     GLenum format,
     GLint depthBits,
@@ -262,14 +232,12 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugOSMESAApi::OSMesaDestroyContextFn(OSMesaContext ctx) {
   GL_SERVICE_LOG("OSMesaDestroyContext"
                  << "(" << ctx << ")");
   osmesa_api_->OSMesaDestroyContextFn(ctx);
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugOSMESAApi::OSMesaGetColorBufferFn(OSMesaContext c,
                                                  GLint* width,
                                                  GLint* height,
@@ -285,7 +253,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 OSMesaContext DebugOSMESAApi::OSMesaGetCurrentContextFn(void) {
   GL_SERVICE_LOG("OSMesaGetCurrentContext"
                  << "("
@@ -295,7 +262,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugOSMESAApi::OSMesaGetDepthBufferFn(OSMesaContext c,
                                                  GLint* width,
                                                  GLint* height,
@@ -312,7 +278,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugOSMESAApi::OSMesaGetIntegervFn(GLint pname, GLint* value) {
   GL_SERVICE_LOG("OSMesaGetIntegerv"
                  << "(" << pname << ", " << static_cast<const void*>(value)
@@ -320,7 +285,6 @@
   osmesa_api_->OSMesaGetIntegervFn(pname, value);
 }
 
-DISABLE_CFI_ICALL
 OSMESAproc DebugOSMESAApi::OSMesaGetProcAddressFn(const char* funcName) {
   GL_SERVICE_LOG("OSMesaGetProcAddress"
                  << "(" << funcName << ")");
@@ -329,7 +293,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 GLboolean DebugOSMESAApi::OSMesaMakeCurrentFn(OSMesaContext ctx,
                                               void* buffer,
                                               GLenum type,
@@ -345,7 +308,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 void DebugOSMESAApi::OSMesaPixelStoreFn(GLint pname, GLint value) {
   GL_SERVICE_LOG("OSMesaPixelStore"
                  << "(" << pname << ", " << value << ")");
diff --git a/ui/gl/gl_bindings_autogen_wgl.cc b/ui/gl/gl_bindings_autogen_wgl.cc
index 3c40f10e..547cf73 100644
--- a/ui/gl/gl_bindings_autogen_wgl.cc
+++ b/ui/gl/gl_bindings_autogen_wgl.cc
@@ -10,8 +10,6 @@
 
 #include <string>
 
-#include "base/compiler_specific.h"
-#include "base/memory/protected_memory.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
@@ -22,10 +20,7 @@
 
 namespace gl {
 
-// Place the driver in protected memory so that it is set
-// read-only after it is initialized, preventing it from
-// being tampered with. See http://crbug.com/771365.
-PROTECTED_MEMORY_SECTION base::ProtectedMemory<DriverWGL> g_driver_wgl;
+DriverWGL g_driver_wgl;  // Exists in .bss
 
 void DriverWGL::InitializeStaticBindings() {
   // Ensure struct has been zero-initialized.
@@ -121,7 +116,6 @@
   memset(this, 0, sizeof(*this));
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglChoosePixelFormatARBFn(HDC dc,
                                            const int* int_attrib_list,
                                            const float* float_attrib_list,
@@ -133,17 +127,14 @@
                                                formats, num_formats);
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglCopyContextFn(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask) {
   return driver_->fn.wglCopyContextFn(hglrcSrc, hglrcDst, mask);
 }
 
-DISABLE_CFI_ICALL
 HGLRC WGLApiBase::wglCreateContextFn(HDC hdc) {
   return driver_->fn.wglCreateContextFn(hdc);
 }
 
-DISABLE_CFI_ICALL
 HGLRC WGLApiBase::wglCreateContextAttribsARBFn(HDC hDC,
                                                HGLRC hShareContext,
                                                const int* attribList) {
@@ -151,12 +142,10 @@
                                                   attribList);
 }
 
-DISABLE_CFI_ICALL
 HGLRC WGLApiBase::wglCreateLayerContextFn(HDC hdc, int iLayerPlane) {
   return driver_->fn.wglCreateLayerContextFn(hdc, iLayerPlane);
 }
 
-DISABLE_CFI_ICALL
 HPBUFFERARB WGLApiBase::wglCreatePbufferARBFn(HDC hDC,
                                               int iPixelFormat,
                                               int iWidth,
@@ -166,74 +155,60 @@
                                            piAttribList);
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglDeleteContextFn(HGLRC hglrc) {
   return driver_->fn.wglDeleteContextFn(hglrc);
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglDestroyPbufferARBFn(HPBUFFERARB hPbuffer) {
   return driver_->fn.wglDestroyPbufferARBFn(hPbuffer);
 }
 
-DISABLE_CFI_ICALL
 HGLRC WGLApiBase::wglGetCurrentContextFn() {
   return driver_->fn.wglGetCurrentContextFn();
 }
 
-DISABLE_CFI_ICALL
 HDC WGLApiBase::wglGetCurrentDCFn() {
   return driver_->fn.wglGetCurrentDCFn();
 }
 
-DISABLE_CFI_ICALL
 const char* WGLApiBase::wglGetExtensionsStringARBFn(HDC hDC) {
   return driver_->fn.wglGetExtensionsStringARBFn(hDC);
 }
 
-DISABLE_CFI_ICALL
 const char* WGLApiBase::wglGetExtensionsStringEXTFn() {
   return driver_->fn.wglGetExtensionsStringEXTFn();
 }
 
-DISABLE_CFI_ICALL
 HDC WGLApiBase::wglGetPbufferDCARBFn(HPBUFFERARB hPbuffer) {
   return driver_->fn.wglGetPbufferDCARBFn(hPbuffer);
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglMakeCurrentFn(HDC hdc, HGLRC hglrc) {
   return driver_->fn.wglMakeCurrentFn(hdc, hglrc);
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglQueryPbufferARBFn(HPBUFFERARB hPbuffer,
                                       int iAttribute,
                                       int* piValue) {
   return driver_->fn.wglQueryPbufferARBFn(hPbuffer, iAttribute, piValue);
 }
 
-DISABLE_CFI_ICALL
 int WGLApiBase::wglReleasePbufferDCARBFn(HPBUFFERARB hPbuffer, HDC hDC) {
   return driver_->fn.wglReleasePbufferDCARBFn(hPbuffer, hDC);
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglShareListsFn(HGLRC hglrc1, HGLRC hglrc2) {
   return driver_->fn.wglShareListsFn(hglrc1, hglrc2);
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglSwapIntervalEXTFn(int interval) {
   return driver_->fn.wglSwapIntervalEXTFn(interval);
 }
 
-DISABLE_CFI_ICALL
 BOOL WGLApiBase::wglSwapLayerBuffersFn(HDC hdc, UINT fuPlanes) {
   return driver_->fn.wglSwapLayerBuffersFn(hdc, fuPlanes);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglChoosePixelFormatARBFn(HDC dc,
                                             const int* int_attrib_list,
                                             const float* float_attrib_list,
@@ -246,19 +221,16 @@
                                              formats, num_formats);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglCopyContextFn(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglCopyContext")
   return wgl_api_->wglCopyContextFn(hglrcSrc, hglrcDst, mask);
 }
 
-DISABLE_CFI_ICALL
 HGLRC TraceWGLApi::wglCreateContextFn(HDC hdc) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglCreateContext")
   return wgl_api_->wglCreateContextFn(hdc);
 }
 
-DISABLE_CFI_ICALL
 HGLRC TraceWGLApi::wglCreateContextAttribsARBFn(HDC hDC,
                                                 HGLRC hShareContext,
                                                 const int* attribList) {
@@ -266,13 +238,11 @@
   return wgl_api_->wglCreateContextAttribsARBFn(hDC, hShareContext, attribList);
 }
 
-DISABLE_CFI_ICALL
 HGLRC TraceWGLApi::wglCreateLayerContextFn(HDC hdc, int iLayerPlane) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglCreateLayerContext")
   return wgl_api_->wglCreateLayerContextFn(hdc, iLayerPlane);
 }
 
-DISABLE_CFI_ICALL
 HPBUFFERARB TraceWGLApi::wglCreatePbufferARBFn(HDC hDC,
                                                int iPixelFormat,
                                                int iWidth,
@@ -283,55 +253,46 @@
                                          piAttribList);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglDeleteContextFn(HGLRC hglrc) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglDeleteContext")
   return wgl_api_->wglDeleteContextFn(hglrc);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglDestroyPbufferARBFn(HPBUFFERARB hPbuffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglDestroyPbufferARB")
   return wgl_api_->wglDestroyPbufferARBFn(hPbuffer);
 }
 
-DISABLE_CFI_ICALL
 HGLRC TraceWGLApi::wglGetCurrentContextFn() {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglGetCurrentContext")
   return wgl_api_->wglGetCurrentContextFn();
 }
 
-DISABLE_CFI_ICALL
 HDC TraceWGLApi::wglGetCurrentDCFn() {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglGetCurrentDC")
   return wgl_api_->wglGetCurrentDCFn();
 }
 
-DISABLE_CFI_ICALL
 const char* TraceWGLApi::wglGetExtensionsStringARBFn(HDC hDC) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglGetExtensionsStringARB")
   return wgl_api_->wglGetExtensionsStringARBFn(hDC);
 }
 
-DISABLE_CFI_ICALL
 const char* TraceWGLApi::wglGetExtensionsStringEXTFn() {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglGetExtensionsStringEXT")
   return wgl_api_->wglGetExtensionsStringEXTFn();
 }
 
-DISABLE_CFI_ICALL
 HDC TraceWGLApi::wglGetPbufferDCARBFn(HPBUFFERARB hPbuffer) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglGetPbufferDCARB")
   return wgl_api_->wglGetPbufferDCARBFn(hPbuffer);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglMakeCurrentFn(HDC hdc, HGLRC hglrc) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglMakeCurrent")
   return wgl_api_->wglMakeCurrentFn(hdc, hglrc);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglQueryPbufferARBFn(HPBUFFERARB hPbuffer,
                                        int iAttribute,
                                        int* piValue) {
@@ -339,31 +300,26 @@
   return wgl_api_->wglQueryPbufferARBFn(hPbuffer, iAttribute, piValue);
 }
 
-DISABLE_CFI_ICALL
 int TraceWGLApi::wglReleasePbufferDCARBFn(HPBUFFERARB hPbuffer, HDC hDC) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglReleasePbufferDCARB")
   return wgl_api_->wglReleasePbufferDCARBFn(hPbuffer, hDC);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglShareListsFn(HGLRC hglrc1, HGLRC hglrc2) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglShareLists")
   return wgl_api_->wglShareListsFn(hglrc1, hglrc2);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglSwapIntervalEXTFn(int interval) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglSwapIntervalEXT")
   return wgl_api_->wglSwapIntervalEXTFn(interval);
 }
 
-DISABLE_CFI_ICALL
 BOOL TraceWGLApi::wglSwapLayerBuffersFn(HDC hdc, UINT fuPlanes) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::wglSwapLayerBuffers")
   return wgl_api_->wglSwapLayerBuffersFn(hdc, fuPlanes);
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglChoosePixelFormatARBFn(HDC dc,
                                             const int* int_attrib_list,
                                             const float* float_attrib_list,
@@ -383,7 +339,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglCopyContextFn(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask) {
   GL_SERVICE_LOG("wglCopyContext"
                  << "(" << hglrcSrc << ", " << hglrcDst << ", " << mask << ")");
@@ -392,7 +347,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 HGLRC DebugWGLApi::wglCreateContextFn(HDC hdc) {
   GL_SERVICE_LOG("wglCreateContext"
                  << "(" << hdc << ")");
@@ -401,7 +355,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 HGLRC DebugWGLApi::wglCreateContextAttribsARBFn(HDC hDC,
                                                 HGLRC hShareContext,
                                                 const int* attribList) {
@@ -414,7 +367,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 HGLRC DebugWGLApi::wglCreateLayerContextFn(HDC hdc, int iLayerPlane) {
   GL_SERVICE_LOG("wglCreateLayerContext"
                  << "(" << hdc << ", " << iLayerPlane << ")");
@@ -423,7 +375,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 HPBUFFERARB DebugWGLApi::wglCreatePbufferARBFn(HDC hDC,
                                                int iPixelFormat,
                                                int iWidth,
@@ -439,7 +390,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglDeleteContextFn(HGLRC hglrc) {
   GL_SERVICE_LOG("wglDeleteContext"
                  << "(" << hglrc << ")");
@@ -448,7 +398,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglDestroyPbufferARBFn(HPBUFFERARB hPbuffer) {
   GL_SERVICE_LOG("wglDestroyPbufferARB"
                  << "(" << hPbuffer << ")");
@@ -457,7 +406,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 HGLRC DebugWGLApi::wglGetCurrentContextFn() {
   GL_SERVICE_LOG("wglGetCurrentContext"
                  << "("
@@ -467,7 +415,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 HDC DebugWGLApi::wglGetCurrentDCFn() {
   GL_SERVICE_LOG("wglGetCurrentDC"
                  << "("
@@ -477,7 +424,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 const char* DebugWGLApi::wglGetExtensionsStringARBFn(HDC hDC) {
   GL_SERVICE_LOG("wglGetExtensionsStringARB"
                  << "(" << hDC << ")");
@@ -486,7 +432,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 const char* DebugWGLApi::wglGetExtensionsStringEXTFn() {
   GL_SERVICE_LOG("wglGetExtensionsStringEXT"
                  << "("
@@ -496,7 +441,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 HDC DebugWGLApi::wglGetPbufferDCARBFn(HPBUFFERARB hPbuffer) {
   GL_SERVICE_LOG("wglGetPbufferDCARB"
                  << "(" << hPbuffer << ")");
@@ -505,7 +449,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglMakeCurrentFn(HDC hdc, HGLRC hglrc) {
   GL_SERVICE_LOG("wglMakeCurrent"
                  << "(" << hdc << ", " << hglrc << ")");
@@ -514,7 +457,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglQueryPbufferARBFn(HPBUFFERARB hPbuffer,
                                        int iAttribute,
                                        int* piValue) {
@@ -526,7 +468,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 int DebugWGLApi::wglReleasePbufferDCARBFn(HPBUFFERARB hPbuffer, HDC hDC) {
   GL_SERVICE_LOG("wglReleasePbufferDCARB"
                  << "(" << hPbuffer << ", " << hDC << ")");
@@ -535,7 +476,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglShareListsFn(HGLRC hglrc1, HGLRC hglrc2) {
   GL_SERVICE_LOG("wglShareLists"
                  << "(" << hglrc1 << ", " << hglrc2 << ")");
@@ -544,7 +484,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglSwapIntervalEXTFn(int interval) {
   GL_SERVICE_LOG("wglSwapIntervalEXT"
                  << "(" << interval << ")");
@@ -553,7 +492,6 @@
   return result;
 }
 
-DISABLE_CFI_ICALL
 BOOL DebugWGLApi::wglSwapLayerBuffersFn(HDC hdc, UINT fuPlanes) {
   GL_SERVICE_LOG("wglSwapLayerBuffers"
                  << "(" << hdc << ", " << fuPlanes << ")");
diff --git a/ui/gl/gl_context_glx_unittest.cc b/ui/gl/gl_context_glx_unittest.cc
index da01392..25478c7 100644
--- a/ui/gl/gl_context_glx_unittest.cc
+++ b/ui/gl/gl_context_glx_unittest.cc
@@ -65,12 +65,12 @@
     // window. In those cases, override the glx api to force MakeCurrent() to
     // fail.
     context->ReleaseCurrent(surface.get());
-    auto real_fn = g_driver_glx->fn.glXMakeContextCurrentFn;
-    g_driver_glx->fn.glXMakeContextCurrentFn =
+    auto real_fn = g_driver_glx.fn.glXMakeContextCurrentFn;
+    g_driver_glx.fn.glXMakeContextCurrentFn =
         [](Display* display, GLXDrawable drawable, GLXDrawable read,
            GLXContext context) -> int { return 0; };
     EXPECT_FALSE(context->MakeCurrent(surface.get()));
-    g_driver_glx->fn.glXMakeContextCurrentFn = real_fn;
+    g_driver_glx.fn.glXMakeContextCurrentFn = real_fn;
   }
   // At this point, MakeCurrent() failed. Make sure the GLContextGLX still was
   // not destroyed.
diff --git a/ui/gl/gl_context_wgl.cc b/ui/gl/gl_context_wgl.cc
index 01b6252c..520b4ca 100644
--- a/ui/gl/gl_context_wgl.cc
+++ b/ui/gl/gl_context_wgl.cc
@@ -153,7 +153,7 @@
 
 void GLContextWGL::OnSetSwapInterval(int interval) {
   DCHECK(IsCurrent(nullptr));
-  if (g_driver_wgl->ext.b_WGL_EXT_swap_control) {
+  if (g_driver_wgl.ext.b_WGL_EXT_swap_control) {
     wglSwapIntervalEXT(interval);
   } else {
       LOG(WARNING) <<
diff --git a/ui/gl/gl_egl_api_implementation.cc b/ui/gl/gl_egl_api_implementation.cc
index 5bc79cb..f3bcf75 100644
--- a/ui/gl/gl_egl_api_implementation.cc
+++ b/ui/gl/gl_egl_api_implementation.cc
@@ -17,12 +17,11 @@
 DebugEGLApi* g_debug_egl = nullptr;
 
 void InitializeStaticGLBindingsEGL() {
-  auto writer = base::AutoWritableMemory::Create(g_driver_egl);
-  g_driver_egl->InitializeStaticBindings();
+  g_driver_egl.InitializeStaticBindings();
   if (!g_real_egl) {
     g_real_egl = new RealEGLApi();
   }
-  g_real_egl->Initialize(&*g_driver_egl);
+  g_real_egl->Initialize(&g_driver_egl);
   g_current_egl_context = g_real_egl;
 }
 
@@ -43,8 +42,7 @@
     g_real_egl = NULL;
   }
   g_current_egl_context = NULL;
-  auto writer = base::AutoWritableMemory::Create(g_driver_egl);
-  g_driver_egl->ClearBindings();
+  g_driver_egl.ClearBindings();
 }
 
 EGLApi::EGLApi() {
diff --git a/ui/gl/gl_fence.cc b/ui/gl/gl_fence.cc
index c41b658..39cb8dc 100644
--- a/ui/gl/gl_fence.cc
+++ b/ui/gl/gl_fence.cc
@@ -39,7 +39,7 @@
 #if defined(OS_MACOSX)
          g_current_gl_driver->ext.b_GL_APPLE_fence ||
 #else
-         g_driver_egl->ext.b_EGL_KHR_fence_sync ||
+         g_driver_egl.ext.b_EGL_KHR_fence_sync ||
 #endif
          g_current_gl_driver->ext.b_GL_NV_fence;
 }
@@ -50,8 +50,8 @@
 
   std::unique_ptr<GLFence> fence;
 #if !defined(OS_MACOSX)
-  if (g_driver_egl->ext.b_EGL_KHR_fence_sync &&
-      g_driver_egl->ext.b_EGL_KHR_wait_sync) {
+  if (g_driver_egl.ext.b_EGL_KHR_fence_sync &&
+      g_driver_egl.ext.b_EGL_KHR_wait_sync) {
     // Prefer GLFenceEGL which doesn't require GL context switching.
     fence = GLFenceEGL::Create();
     DCHECK(fence);
@@ -66,7 +66,7 @@
   } else if (g_current_gl_driver->ext.b_GL_APPLE_fence) {
     fence.reset(new GLFenceAPPLE);
 #else
-  } else if (g_driver_egl->ext.b_EGL_KHR_fence_sync) {
+  } else if (g_driver_egl.ext.b_EGL_KHR_fence_sync) {
     fence = GLFenceEGL::Create();
     DCHECK(fence);
 #endif
diff --git a/ui/gl/gl_fence_egl.cc b/ui/gl/gl_fence_egl.cc
index 2b58e43..536346f 100644
--- a/ui/gl/gl_fence_egl.cc
+++ b/ui/gl/gl_fence_egl.cc
@@ -77,7 +77,7 @@
 }
 
 void GLFenceEGL::ServerWait() {
-  if (!g_driver_egl->ext.b_EGL_KHR_wait_sync) {
+  if (!g_driver_egl.ext.b_EGL_KHR_wait_sync) {
     ClientWait();
     return;
   }
diff --git a/ui/gl/gl_glx_api_implementation.cc b/ui/gl/gl_glx_api_implementation.cc
index c50ec2e..d7903a2 100644
--- a/ui/gl/gl_glx_api_implementation.cc
+++ b/ui/gl/gl_glx_api_implementation.cc
@@ -17,12 +17,11 @@
 DebugGLXApi* g_debug_glx;
 
 void InitializeStaticGLBindingsGLX() {
-  auto writer = base::AutoWritableMemory::Create(g_driver_glx);
-  g_driver_glx->InitializeStaticBindings();
+  g_driver_glx.InitializeStaticBindings();
   if (!g_real_glx) {
     g_real_glx = new RealGLXApi();
   }
-  g_real_glx->Initialize(&*g_driver_glx);
+  g_real_glx->Initialize(&g_driver_glx);
   g_current_glx_context = g_real_glx;
 }
 
@@ -43,8 +42,7 @@
     g_real_glx = NULL;
   }
   g_current_glx_context = NULL;
-  auto writer = base::AutoWritableMemory::Create(g_driver_glx);
-  g_driver_glx->ClearBindings();
+  g_driver_glx.ClearBindings();
 }
 
 GLXApi::GLXApi() {
diff --git a/ui/gl/gl_osmesa_api_implementation.cc b/ui/gl/gl_osmesa_api_implementation.cc
index e2f64696..081fc32 100644
--- a/ui/gl/gl_osmesa_api_implementation.cc
+++ b/ui/gl/gl_osmesa_api_implementation.cc
@@ -10,14 +10,13 @@
 DebugOSMESAApi* g_debug_osmesa = nullptr;
 
 void InitializeStaticGLBindingsOSMESA() {
-  auto writer = base::AutoWritableMemory::Create(g_driver_osmesa);
-  g_driver_osmesa->InitializeStaticBindings();
+  g_driver_osmesa.InitializeStaticBindings();
   if (!g_real_osmesa) {
     g_real_osmesa = new RealOSMESAApi();
   }
-  g_real_osmesa->Initialize(&*g_driver_osmesa);
+  g_real_osmesa->Initialize(&g_driver_osmesa);
   g_current_osmesa_context = g_real_osmesa;
-  g_driver_osmesa->InitializeExtensionBindings();
+  g_driver_osmesa.InitializeExtensionBindings();
 }
 
 void InitializeDebugGLBindingsOSMESA() {
@@ -37,8 +36,7 @@
     g_real_osmesa = NULL;
   }
   g_current_osmesa_context = NULL;
-  auto writer = base::AutoWritableMemory::Create(g_driver_osmesa);
-  g_driver_osmesa->ClearBindings();
+  g_driver_osmesa.ClearBindings();
 }
 
 OSMESAApi::OSMESAApi() {
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index fff52c4..556c566 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -557,25 +557,23 @@
     return true;
 
   // Must be called before InitializeDisplay().
-  auto writer = base::AutoWritableMemory::Create(g_driver_egl);
-  g_driver_egl->InitializeClientExtensionBindings();
+  g_driver_egl.InitializeClientExtensionBindings();
 
   InitializeDisplay(native_display);
   if (g_display == EGL_NO_DISPLAY)
     return false;
 
   // Must be called after InitializeDisplay().
-  g_driver_egl->InitializeExtensionBindings();
+  g_driver_egl.InitializeExtensionBindings();
 
   return InitializeOneOffCommon();
 }
 
 // static
 bool GLSurfaceEGL::InitializeOneOffForTesting() {
-  auto writer = base::AutoWritableMemory::Create(g_driver_egl);
-  g_driver_egl->InitializeClientExtensionBindings();
+  g_driver_egl.InitializeClientExtensionBindings();
   g_display = eglGetCurrentDisplay();
-  g_driver_egl->InitializeExtensionBindings();
+  g_driver_egl.InitializeExtensionBindings();
   return InitializeOneOffCommon();
 }
 
@@ -670,7 +668,7 @@
 #if defined(OS_ANDROID)
   if (base::android::BuildInfo::GetInstance()->sdk_int() >=
           base::android::SDK_VERSION_NOUGAT &&
-      g_driver_egl->fn.eglDupNativeFenceFDANDROIDFn) {
+      g_driver_egl.fn.eglDupNativeFenceFDANDROIDFn) {
     g_egl_android_native_fence_sync_supported = true;
   }
 #endif
@@ -683,8 +681,7 @@
 bool GLSurfaceEGL::InitializeExtensionSettingsOneOff() {
   if (!initialized_)
     return false;
-  auto writer = base::AutoWritableMemory::Create(g_driver_egl);
-  g_driver_egl->UpdateConditionalExtensionBindings();
+  g_driver_egl.UpdateConditionalExtensionBindings();
   g_egl_extensions = eglQueryString(g_display, EGL_EXTENSIONS);
 
   return true;
@@ -898,7 +895,7 @@
     egl_window_attributes.push_back(size_.height());
   }
 
-  if (g_driver_egl->ext.b_EGL_NV_post_sub_buffer) {
+  if (g_driver_egl.ext.b_EGL_NV_post_sub_buffer) {
     egl_window_attributes.push_back(EGL_POST_SUB_BUFFER_SUPPORTED_NV);
     egl_window_attributes.push_back(EGL_TRUE);
   }
@@ -963,7 +960,7 @@
     return false;
   }
 
-  if (g_driver_egl->ext.b_EGL_NV_post_sub_buffer) {
+  if (g_driver_egl.ext.b_EGL_NV_post_sub_buffer) {
     EGLint surfaceVal;
     EGLBoolean retVal = eglQuerySurface(
         GetDisplay(), surface_, EGL_POST_SUB_BUFFER_SUPPORTED_NV, &surfaceVal);
@@ -971,7 +968,7 @@
   }
 
   supports_swap_buffer_with_damage_ =
-      g_driver_egl->ext.b_EGL_KHR_swap_buffers_with_damage;
+      g_driver_egl.ext.b_EGL_KHR_swap_buffers_with_damage;
 
   if (!vsync_provider_external_ && EGLSyncControlVSyncProvider::IsSupported()) {
     vsync_provider_internal_ =
@@ -982,11 +979,11 @@
 }
 
 bool NativeViewGLSurfaceEGL::SupportsSwapTimestamps() const {
-  return g_driver_egl->ext.b_EGL_ANDROID_get_frame_timestamps;
+  return g_driver_egl.ext.b_EGL_ANDROID_get_frame_timestamps;
 }
 
 void NativeViewGLSurfaceEGL::SetEnableSwapTimestamps() {
-  DCHECK(g_driver_egl->ext.b_EGL_ANDROID_get_frame_timestamps);
+  DCHECK(g_driver_egl.ext.b_EGL_ANDROID_get_frame_timestamps);
 
   // If frame timestamps are supported, set the proper attribute to enable the
   // feature and then cache the timestamps supported by the underlying
@@ -1490,10 +1487,10 @@
   NOTREACHED();
   return NULL;
 #else
-  if (!g_driver_egl->ext.b_EGL_ANGLE_query_surface_pointer)
+  if (!g_driver_egl.ext.b_EGL_ANGLE_query_surface_pointer)
     return NULL;
 
-  if (!g_driver_egl->ext.b_EGL_ANGLE_surface_d3d_texture_2d_share_handle)
+  if (!g_driver_egl.ext.b_EGL_ANGLE_surface_d3d_texture_2d_share_handle)
     return NULL;
 
   void* handle;
diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc
index a80f544b..5b0794c 100644
--- a/ui/gl/gl_surface_glx.cc
+++ b/ui/gl/gl_surface_glx.cc
@@ -456,8 +456,7 @@
   if (!initialized_)
     return false;
 
-  auto writer = base::AutoWritableMemory::Create(g_driver_glx);
-  g_driver_glx->InitializeExtensionBindings();
+  g_driver_glx.InitializeExtensionBindings();
 
   g_glx_context_create = HasGLXExtension("GLX_ARB_create_context");
   g_glx_create_context_robustness_supported =
@@ -694,7 +693,7 @@
 }
 
 bool NativeViewGLSurfaceGLX::SupportsPostSubBuffer() {
-  return g_driver_glx->ext.b_GLX_MESA_copy_sub_buffer;
+  return g_driver_glx.ext.b_GLX_MESA_copy_sub_buffer;
 }
 
 void* NativeViewGLSurfaceGLX::GetConfig() {
@@ -717,7 +716,7 @@
     int width,
     int height,
     const PresentationCallback& callback) {
-  DCHECK(g_driver_glx->ext.b_GLX_MESA_copy_sub_buffer);
+  DCHECK(g_driver_glx.ext.b_GLX_MESA_copy_sub_buffer);
   PreSwapBuffers(callback);
   glXCopySubBufferMESA(g_display, GetDrawableHandle(), x, y, width, height);
   PostSwapBuffers();
diff --git a/ui/gl/gl_surface_wgl.cc b/ui/gl/gl_surface_wgl.cc
index d77dce5..d3a91b9 100644
--- a/ui/gl/gl_surface_wgl.cc
+++ b/ui/gl/gl_surface_wgl.cc
@@ -180,7 +180,7 @@
 bool GLSurfaceWGL::InitializeExtensionSettingsOneOff() {
   if (!initialized_)
     return false;
-  g_driver_wgl->InitializeExtensionBindings();
+  g_driver_wgl.InitializeExtensionBindings();
   return true;
 }
 
@@ -355,7 +355,7 @@
 bool PbufferGLSurfaceWGL::Initialize(GLSurfaceFormat format) {
   DCHECK(!device_context_);
 
-  if (!g_driver_wgl->fn.wglCreatePbufferARBFn) {
+  if (!g_driver_wgl.fn.wglCreatePbufferARBFn) {
     LOG(ERROR) << "wglCreatePbufferARB not available.";
     Destroy();
     return false;
diff --git a/ui/gl/gl_wgl_api_implementation.cc b/ui/gl/gl_wgl_api_implementation.cc
index 488f64eef..7cda14e 100644
--- a/ui/gl/gl_wgl_api_implementation.cc
+++ b/ui/gl/gl_wgl_api_implementation.cc
@@ -17,12 +17,11 @@
 DebugWGLApi* g_debug_wgl = nullptr;
 
 void InitializeStaticGLBindingsWGL() {
-  auto writer = base::AutoWritableMemory::Create(g_driver_wgl);
-  g_driver_wgl->InitializeStaticBindings();
+  g_driver_wgl.InitializeStaticBindings();
   if (!g_real_wgl) {
     g_real_wgl = new RealWGLApi();
   }
-  g_real_wgl->Initialize(&*g_driver_wgl);
+  g_real_wgl->Initialize(&g_driver_wgl);
   g_current_wgl_context = g_real_wgl;
 }
 
@@ -43,8 +42,7 @@
     g_real_wgl = NULL;
   }
   g_current_wgl_context = NULL;
-  auto writer = base::AutoWritableMemory::Create(g_driver_wgl);
-  g_driver_wgl->ClearBindings();
+  g_driver_wgl.ClearBindings();
 }
 
 WGLApi::WGLApi() {
diff --git a/ui/gl/glx_api_unittest.cc b/ui/gl/glx_api_unittest.cc
index 2e28d72..1b2dfc9 100644
--- a/ui/gl/glx_api_unittest.cc
+++ b/ui/gl/glx_api_unittest.cc
@@ -15,9 +15,8 @@
   void SetUp() override {
     fake_extension_string_ = "";
 
-    auto writer = base::AutoWritableMemory::Create(g_driver_glx);
-    g_driver_glx->ClearBindings();
-    g_driver_glx->fn.glXQueryExtensionsStringFn = &FakeQueryExtensionsString;
+    g_driver_glx.ClearBindings();
+    g_driver_glx.fn.glXQueryExtensionsStringFn = &FakeQueryExtensionsString;
     SetGLImplementation(kGLImplementationMockGL);
     SetGLGetProcAddressProc(
         static_cast<GLGetProcAddressProc>(&FakeGLGetProcAddress));
@@ -26,8 +25,7 @@
   void TearDown() override {
     g_current_glx_context = nullptr;
     api_.reset(nullptr);
-    auto writer = base::AutoWritableMemory::Create(g_driver_glx);
-    g_driver_glx->ClearBindings();
+    g_driver_glx.ClearBindings();
 
     fake_extension_string_ = "";
   }
@@ -35,12 +33,11 @@
   void InitializeAPI(const char* disabled_extensions) {
     api_.reset(new RealGLXApi());
     g_current_glx_context = api_.get();
-    api_->Initialize(&*g_driver_glx);
+    api_->Initialize(&g_driver_glx);
     if (disabled_extensions) {
       SetDisabledExtensionsGLX(disabled_extensions);
     }
-    auto writer = base::AutoWritableMemory::Create(g_driver_glx);
-    g_driver_glx->InitializeExtensionBindings();
+    g_driver_glx.InitializeExtensionBindings();
   }
 
   void SetFakeExtensionString(const char* fake_string) {
@@ -88,11 +85,11 @@
   SetFakeExtensionString(kFakeExtensions);
   InitializeAPI(nullptr);
 
-  EXPECT_TRUE(g_driver_glx->ext.b_GLX_ARB_create_context);
+  EXPECT_TRUE(g_driver_glx.ext.b_GLX_ARB_create_context);
 
   InitializeAPI(kFakeDisabledExtensions);
 
-  EXPECT_FALSE(g_driver_glx->ext.b_GLX_ARB_create_context);
+  EXPECT_FALSE(g_driver_glx.ext.b_GLX_ARB_create_context);
 }
 
 TEST_F(GLXApiTest, DisabledExtensionStringTest) {
diff --git a/ui/gl/wgl_api_unittest.cc b/ui/gl/wgl_api_unittest.cc
index 958f30f..a0fe216 100644
--- a/ui/gl/wgl_api_unittest.cc
+++ b/ui/gl/wgl_api_unittest.cc
@@ -21,10 +21,9 @@
     fake_arb_extension_string_ = "";
     fake_ext_extension_string_ = "";
 
-    auto writer = base::AutoWritableMemory::Create(g_driver_wgl);
-    g_driver_wgl->ClearBindings();
-    g_driver_wgl->fn.wglGetExtensionsStringARBFn = &FakeGetExtensionsStringARB;
-    g_driver_wgl->fn.wglGetExtensionsStringEXTFn = &FakeGetExtensionsStringEXT;
+    g_driver_wgl.ClearBindings();
+    g_driver_wgl.fn.wglGetExtensionsStringARBFn = &FakeGetExtensionsStringARB;
+    g_driver_wgl.fn.wglGetExtensionsStringEXTFn = &FakeGetExtensionsStringEXT;
     SetGLImplementation(kGLImplementationDesktopGL);
     SetGLGetProcAddressProc(&FakeGLGetProcAddress);
   }
@@ -32,7 +31,7 @@
   void TearDown() override {
     g_current_wgl_context = nullptr;
     api_.reset(nullptr);
-    g_driver_wgl->ClearBindings();
+    g_driver_wgl.ClearBindings();
 
     fake_ext_extension_string_ = "";
     fake_arb_extension_string_ = "";
@@ -41,12 +40,11 @@
   void InitializeAPI(const char* disabled_extensions) {
     api_.reset(new RealWGLApi());
     g_current_wgl_context = api_.get();
-    api_->Initialize(&*g_driver_wgl);
+    api_->Initialize(&g_driver_wgl);
     if (disabled_extensions) {
       SetDisabledExtensionsWGL(disabled_extensions);
     }
-    auto writer = base::AutoWritableMemory::Create(g_driver_wgl);
-    g_driver_wgl->InitializeExtensionBindings();
+    g_driver_wgl.InitializeExtensionBindings();
   }
 
   void SetFakeEXTExtensionString(const char* fake_string) {
@@ -94,17 +92,17 @@
 
   InitializeAPI(nullptr);
 
-  EXPECT_FALSE(g_driver_wgl->ext.b_WGL_ARB_extensions_string);
+  EXPECT_FALSE(g_driver_wgl.ext.b_WGL_ARB_extensions_string);
 
   // NULL simulates not being able to resolve wglGetExtensionsStringARB
   SetFakeARBExtensionString(nullptr);
   SetFakeEXTExtensionString(kFakeExtensions);
 
   InitializeAPI(nullptr);
-  EXPECT_TRUE(g_driver_wgl->ext.b_WGL_ARB_extensions_string);
+  EXPECT_TRUE(g_driver_wgl.ext.b_WGL_ARB_extensions_string);
 
   InitializeAPI(kFakeExtensions);
-  EXPECT_FALSE(g_driver_wgl->ext.b_WGL_ARB_extensions_string);
+  EXPECT_FALSE(g_driver_wgl.ext.b_WGL_ARB_extensions_string);
 
   SetFakeARBExtensionString("");
   SetFakeEXTExtensionString(kFakeExtensions);
@@ -113,16 +111,16 @@
   // We expect false here, because wglGetExtensionsStringARB
   // always takes precedence over wglGetExtensionsStringEXT
   // if it is available.
-  EXPECT_FALSE(g_driver_wgl->ext.b_WGL_ARB_extensions_string);
+  EXPECT_FALSE(g_driver_wgl.ext.b_WGL_ARB_extensions_string);
 
   SetFakeARBExtensionString(kFakeExtensions);
   SetFakeEXTExtensionString("");
 
   InitializeAPI(nullptr);
-  EXPECT_TRUE(g_driver_wgl->ext.b_WGL_ARB_extensions_string);
+  EXPECT_TRUE(g_driver_wgl.ext.b_WGL_ARB_extensions_string);
 
   InitializeAPI(kFakeDisabledExtensions);
-  EXPECT_FALSE(g_driver_wgl->ext.b_WGL_ARB_extensions_string);
+  EXPECT_FALSE(g_driver_wgl.ext.b_WGL_ARB_extensions_string);
 }
 
 TEST_F(WGLApiTest, DisabledExtensionStringTest) {