diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn
index e86e1f0..245a710 100644
--- a/chrome/renderer/BUILD.gn
+++ b/chrome/renderer/BUILD.gn
@@ -102,8 +102,8 @@
     "sandbox_status_extension_android.h",
     "security_filter_peer.cc",
     "security_filter_peer.h",
-    "ssl/ssl_certificate_error_page_controller.cc",
-    "ssl/ssl_certificate_error_page_controller.h",
+    "security_interstitials/security_interstitial_page_controller.cc",
+    "security_interstitials/security_interstitial_page_controller.h",
     "supervised_user/supervised_user_error_page_controller.cc",
     "supervised_user/supervised_user_error_page_controller.h",
     "tts_dispatcher.cc",
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc
index 0081b5b..2eb6a96 100644
--- a/chrome/renderer/net/net_error_helper.cc
+++ b/chrome/renderer/net/net_error_helper.cc
@@ -24,7 +24,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/renderer/chrome_render_thread_observer.h"
-#include "chrome/renderer/ssl/ssl_certificate_error_page_controller.h"
+#include "chrome/renderer/security_interstitials/security_interstitial_page_controller.h"
 #include "chrome/renderer/supervised_user/supervised_user_error_page_controller.h"
 #include "components/error_page/common/error.h"
 #include "components/error_page/common/error_page_params.h"
@@ -167,7 +167,7 @@
     : RenderFrameObserver(render_frame),
       content::RenderFrameObserverTracker<NetErrorHelper>(render_frame),
       weak_controller_delegate_factory_(this),
-      weak_ssl_error_controller_delegate_factory_(this),
+      weak_security_interstitial_controller_delegate_factory_(this),
       weak_supervised_user_error_controller_delegate_factory_(this) {
   RenderThread::Get()->AddObserver(this);
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
@@ -324,7 +324,7 @@
   // error page, the controller has not yet been attached, so this won't affect
   // it.
   weak_controller_delegate_factory_.InvalidateWeakPtrs();
-  weak_ssl_error_controller_delegate_factory_.InvalidateWeakPtrs();
+  weak_security_interstitial_controller_delegate_factory_.InvalidateWeakPtrs();
   weak_supervised_user_error_controller_delegate_factory_.InvalidateWeakPtrs();
 
   core_->OnCommitLoad(GetFrameType(render_frame()),
@@ -433,9 +433,10 @@
                                  failed_url, true /* replace_current_item */);
 }
 
-void NetErrorHelper::EnablePageHelperFunctions(net::Error net_error) {
-  SSLCertificateErrorPageController::Install(
-      render_frame(), weak_ssl_error_controller_delegate_factory_.GetWeakPtr());
+void NetErrorHelper::EnablePageHelperFunctions() {
+  SecurityInterstitialPageController::Install(
+      render_frame(),
+      weak_security_interstitial_controller_delegate_factory_.GetWeakPtr());
   NetErrorPageController::Install(
       render_frame(), weak_controller_delegate_factory_.GetWeakPtr());
 
diff --git a/chrome/renderer/net/net_error_helper.h b/chrome/renderer/net/net_error_helper.h
index cf104cf8..0b259ec 100644
--- a/chrome/renderer/net/net_error_helper.h
+++ b/chrome/renderer/net/net_error_helper.h
@@ -18,7 +18,7 @@
 #include "chrome/common/supervised_user_commands.mojom.h"
 #include "chrome/renderer/net/net_error_helper_core.h"
 #include "chrome/renderer/net/net_error_page_controller.h"
-#include "chrome/renderer/ssl/ssl_certificate_error_page_controller.h"
+#include "chrome/renderer/security_interstitials/security_interstitial_page_controller.h"
 #include "chrome/renderer/supervised_user/supervised_user_error_page_controller.h"
 #include "chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate.h"
 #include "components/error_page/common/net_error_info.h"
@@ -55,7 +55,7 @@
       public content::RenderThreadObserver,
       public NetErrorHelperCore::Delegate,
       public NetErrorPageController::Delegate,
-      public SSLCertificateErrorPageController::Delegate,
+      public SecurityInterstitialPageController::Delegate,
       public SupervisedUserErrorPageControllerDelegate,
       public chrome::mojom::NetworkDiagnosticsClient,
       public chrome::mojom::NavigationCorrector {
@@ -75,7 +75,7 @@
   void UpdateEasterEggHighScore(int high_score) override;
   void ResetEasterEggHighScore() override;
 
-  // SSLCertificateErrorPageController::Delegate implementation
+  // SecurityInterstitialPageController::Delegate implementation
   void SendCommand(
       security_interstitials::SecurityInterstitialCommand command) override;
 
@@ -130,7 +130,7 @@
       bool* auto_fetch_allowed,
       std::string* html) const override;
   void LoadErrorPage(const std::string& html, const GURL& failed_url) override;
-  void EnablePageHelperFunctions(net::Error net_error) override;
+  void EnablePageHelperFunctions() override;
   void UpdateErrorPage(const error_page::Error& error,
                        bool is_failed_post,
                        bool can_use_local_diagnostics_service) override;
@@ -207,8 +207,8 @@
   base::WeakPtrFactory<NetErrorPageController::Delegate>
       weak_controller_delegate_factory_;
 
-  base::WeakPtrFactory<SSLCertificateErrorPageController::Delegate>
-      weak_ssl_error_controller_delegate_factory_;
+  base::WeakPtrFactory<SecurityInterstitialPageController::Delegate>
+      weak_security_interstitial_controller_delegate_factory_;
 
   base::WeakPtrFactory<SupervisedUserErrorPageControllerDelegate>
       weak_supervised_user_error_controller_delegate_factory_;
diff --git a/chrome/renderer/net/net_error_helper_core.cc b/chrome/renderer/net/net_error_helper_core.cc
index 4ef1d0a8..2f25b7a 100644
--- a/chrome/renderer/net/net_error_helper_core.cc
+++ b/chrome/renderer/net/net_error_helper_core.cc
@@ -678,8 +678,7 @@
   delegate_->SetIsShowingDownloadButton(
       committed_error_page_info_->download_button_in_page);
 
-  delegate_->EnablePageHelperFunctions(
-      static_cast<net::Error>(committed_error_page_info_->error.reason()));
+  delegate_->EnablePageHelperFunctions();
 
 #if defined(OS_ANDROID)
   if (committed_error_page_info_->offline_content_feature_state ==
diff --git a/chrome/renderer/net/net_error_helper_core.h b/chrome/renderer/net/net_error_helper_core.h
index 14ebf9c..2720c244 100644
--- a/chrome/renderer/net/net_error_helper_core.h
+++ b/chrome/renderer/net/net_error_helper_core.h
@@ -80,7 +80,7 @@
 
     // Create extra Javascript bindings in the error page. Will only be invoked
     // after an error page has finished loading.
-    virtual void EnablePageHelperFunctions(net::Error net_error) = 0;
+    virtual void EnablePageHelperFunctions() = 0;
 
     // Updates the currently displayed error page with a new error code.  The
     // currently displayed error page must have finished loading, and must have
diff --git a/chrome/renderer/net/net_error_helper_core_unittest.cc b/chrome/renderer/net/net_error_helper_core_unittest.cc
index 86a8b86..6847390d 100644
--- a/chrome/renderer/net/net_error_helper_core_unittest.cc
+++ b/chrome/renderer/net/net_error_helper_core_unittest.cc
@@ -390,7 +390,7 @@
     last_error_html_ = html;
   }
 
-  void EnablePageHelperFunctions(net::Error net_error) override {
+  void EnablePageHelperFunctions() override {
     enable_page_helper_functions_count_++;
   }
 
diff --git a/chrome/renderer/ssl/DEPS b/chrome/renderer/security_interstitials/DEPS
similarity index 100%
rename from chrome/renderer/ssl/DEPS
rename to chrome/renderer/security_interstitials/DEPS
diff --git a/chrome/renderer/ssl/OWNERS b/chrome/renderer/security_interstitials/OWNERS
similarity index 100%
rename from chrome/renderer/ssl/OWNERS
rename to chrome/renderer/security_interstitials/OWNERS
diff --git a/chrome/renderer/security_interstitials/security_interstitial_page_controller.cc b/chrome/renderer/security_interstitials/security_interstitial_page_controller.cc
new file mode 100644
index 0000000..126e46c
--- /dev/null
+++ b/chrome/renderer/security_interstitials/security_interstitial_page_controller.cc
@@ -0,0 +1,146 @@
+// Copyright 2018 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/renderer/security_interstitials/security_interstitial_page_controller.h"
+
+#include "components/security_interstitials/core/controller_client.h"
+#include "content/public/renderer/render_frame.h"
+#include "gin/handle.h"
+#include "gin/object_template_builder.h"
+#include "third_party/blink/public/web/blink.h"
+#include "third_party/blink/public/web/web_local_frame.h"
+
+gin::WrapperInfo SecurityInterstitialPageController::kWrapperInfo = {
+    gin::kEmbedderNativeGin};
+
+SecurityInterstitialPageController::Delegate::~Delegate() {}
+
+void SecurityInterstitialPageController::Install(
+    content::RenderFrame* render_frame,
+    base::WeakPtr<Delegate> delegate) {
+  v8::Isolate* isolate = blink::MainThreadIsolate();
+  v8::HandleScope handle_scope(isolate);
+  v8::Local<v8::Context> context =
+      render_frame->GetWebFrame()->MainWorldScriptContext();
+  if (context.IsEmpty())
+    return;
+
+  v8::Context::Scope context_scope(context);
+
+  gin::Handle<SecurityInterstitialPageController> controller =
+      gin::CreateHandle(isolate,
+                        new SecurityInterstitialPageController(delegate));
+  if (controller.IsEmpty())
+    return;
+
+  v8::Local<v8::Object> global = context->Global();
+  global->Set(gin::StringToV8(isolate, "certificateErrorPageController"),
+              controller.ToV8());
+}
+
+SecurityInterstitialPageController::SecurityInterstitialPageController(
+    base::WeakPtr<Delegate> delegate)
+    : delegate_(delegate) {}
+
+SecurityInterstitialPageController::~SecurityInterstitialPageController() {}
+
+void SecurityInterstitialPageController::DontProceed() {
+  SendCommand(
+      security_interstitials::SecurityInterstitialCommand::CMD_DONT_PROCEED);
+}
+
+void SecurityInterstitialPageController::Proceed() {
+  SendCommand(security_interstitials::SecurityInterstitialCommand::CMD_PROCEED);
+}
+
+void SecurityInterstitialPageController::ShowMoreSection() {
+  SendCommand(security_interstitials::SecurityInterstitialCommand::
+                  CMD_SHOW_MORE_SECTION);
+}
+
+void SecurityInterstitialPageController::OpenHelpCenter() {
+  SendCommand(security_interstitials::SecurityInterstitialCommand::
+                  CMD_OPEN_HELP_CENTER);
+}
+
+void SecurityInterstitialPageController::OpenDiagnostic() {
+  SendCommand(
+      security_interstitials::SecurityInterstitialCommand::CMD_OPEN_DIAGNOSTIC);
+}
+
+void SecurityInterstitialPageController::Reload() {
+  SendCommand(security_interstitials::SecurityInterstitialCommand::CMD_RELOAD);
+}
+
+void SecurityInterstitialPageController::OpenDateSettings() {
+  SendCommand(security_interstitials::SecurityInterstitialCommand::
+                  CMD_OPEN_DATE_SETTINGS);
+}
+
+void SecurityInterstitialPageController::OpenLogin() {
+  SendCommand(
+      security_interstitials::SecurityInterstitialCommand::CMD_OPEN_LOGIN);
+}
+
+void SecurityInterstitialPageController::DoReport() {
+  SendCommand(
+      security_interstitials::SecurityInterstitialCommand::CMD_DO_REPORT);
+}
+
+void SecurityInterstitialPageController::DontReport() {
+  SendCommand(
+      security_interstitials::SecurityInterstitialCommand::CMD_DONT_REPORT);
+}
+
+void SecurityInterstitialPageController::OpenReportingPrivacy() {
+  SendCommand(security_interstitials::SecurityInterstitialCommand::
+                  CMD_OPEN_REPORTING_PRIVACY);
+}
+
+void SecurityInterstitialPageController::OpenWhitepaper() {
+  SendCommand(
+      security_interstitials::SecurityInterstitialCommand::CMD_OPEN_WHITEPAPER);
+}
+
+void SecurityInterstitialPageController::ReportPhishingError() {
+  SendCommand(security_interstitials::SecurityInterstitialCommand::
+                  CMD_REPORT_PHISHING_ERROR);
+}
+
+void SecurityInterstitialPageController::SendCommand(
+    security_interstitials::SecurityInterstitialCommand command) {
+  if (delegate_) {
+    delegate_->SendCommand(command);
+  }
+}
+
+gin::ObjectTemplateBuilder
+SecurityInterstitialPageController::GetObjectTemplateBuilder(
+    v8::Isolate* isolate) {
+  return gin::Wrappable<SecurityInterstitialPageController>::
+      GetObjectTemplateBuilder(isolate)
+          .SetMethod("dontProceed",
+                     &SecurityInterstitialPageController::DontProceed)
+          .SetMethod("proceed", &SecurityInterstitialPageController::Proceed)
+          .SetMethod("showMoreSection",
+                     &SecurityInterstitialPageController::ShowMoreSection)
+          .SetMethod("openHelpCenter",
+                     &SecurityInterstitialPageController::OpenHelpCenter)
+          .SetMethod("openDiagnostic",
+                     &SecurityInterstitialPageController::OpenDiagnostic)
+          .SetMethod("reload", &SecurityInterstitialPageController::Reload)
+          .SetMethod("openDateSettings",
+                     &SecurityInterstitialPageController::OpenDateSettings)
+          .SetMethod("openLogin",
+                     &SecurityInterstitialPageController::OpenLogin)
+          .SetMethod("doReport", &SecurityInterstitialPageController::DoReport)
+          .SetMethod("dontReport",
+                     &SecurityInterstitialPageController::DontReport)
+          .SetMethod("openReportingPrivacy",
+                     &SecurityInterstitialPageController::OpenReportingPrivacy)
+          .SetMethod("openWhitepaper",
+                     &SecurityInterstitialPageController::OpenWhitepaper)
+          .SetMethod("reportPhishingError",
+                     &SecurityInterstitialPageController::ReportPhishingError);
+}
diff --git a/chrome/renderer/ssl/ssl_certificate_error_page_controller.h b/chrome/renderer/security_interstitials/security_interstitial_page_controller.h
similarity index 76%
rename from chrome/renderer/ssl/ssl_certificate_error_page_controller.h
rename to chrome/renderer/security_interstitials/security_interstitial_page_controller.h
index b550222..967a9e7 100644
--- a/chrome/renderer/ssl/ssl_certificate_error_page_controller.h
+++ b/chrome/renderer/security_interstitials/security_interstitial_page_controller.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 CHROME_RENDERER_SSL_SSL_CERTIFICATE_ERROR_PAGE_CONTROLLER_H_
-#define CHROME_RENDERER_SSL_SSL_CERTIFICATE_ERROR_PAGE_CONTROLLER_H_
+#ifndef CHROME_RENDERER_SECURITY_INTERSTITIALS_SECURITY_INTERSTITIAL_PAGE_CONTROLLER_H_
+#define CHROME_RENDERER_SECURITY_INTERSTITIALS_SECURITY_INTERSTITIAL_PAGE_CONTROLLER_H_
 
 #include "base/memory/weak_ptr.h"
 #include "components/security_interstitials/core/controller_client.h"
@@ -16,8 +16,8 @@
 // This class makes various helper functions available to interstitials
 // when committed interstitials are on. It is bound to the JavaScript
 // window.certificateErrorPageController object.
-class SSLCertificateErrorPageController
-    : public gin::Wrappable<SSLCertificateErrorPageController> {
+class SecurityInterstitialPageController
+    : public gin::Wrappable<SecurityInterstitialPageController> {
  public:
   static gin::WrapperInfo kWrapperInfo;
 
@@ -40,8 +40,8 @@
                       base::WeakPtr<Delegate> delegate);
 
  private:
-  explicit SSLCertificateErrorPageController(base::WeakPtr<Delegate> delegate);
-  ~SSLCertificateErrorPageController() override;
+  explicit SecurityInterstitialPageController(base::WeakPtr<Delegate> delegate);
+  ~SecurityInterstitialPageController() override;
 
   void DontProceed();
   void Proceed();
@@ -65,7 +65,7 @@
 
   base::WeakPtr<Delegate> const delegate_;
 
-  DISALLOW_COPY_AND_ASSIGN(SSLCertificateErrorPageController);
+  DISALLOW_COPY_AND_ASSIGN(SecurityInterstitialPageController);
 };
 
-#endif  // CHROME_RENDERER_SSL_SSL_CERTIFICATE_ERROR_PAGE_CONTROLLER_H_
+#endif  // CHROME_RENDERER_SECURITY_INTERSTITIALS_SECURITY_INTERSTITIAL_PAGE_CONTROLLER_H_
diff --git a/chrome/renderer/ssl/ssl_certificate_error_page_controller.cc b/chrome/renderer/ssl/ssl_certificate_error_page_controller.cc
deleted file mode 100644
index a5516d60..0000000
--- a/chrome/renderer/ssl/ssl_certificate_error_page_controller.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2018 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/renderer/ssl/ssl_certificate_error_page_controller.h"
-
-#include "components/security_interstitials/core/controller_client.h"
-#include "content/public/renderer/render_frame.h"
-#include "gin/handle.h"
-#include "gin/object_template_builder.h"
-#include "third_party/blink/public/web/blink.h"
-#include "third_party/blink/public/web/web_local_frame.h"
-
-gin::WrapperInfo SSLCertificateErrorPageController::kWrapperInfo = {
-    gin::kEmbedderNativeGin};
-
-SSLCertificateErrorPageController::Delegate::~Delegate() {}
-
-void SSLCertificateErrorPageController::Install(
-    content::RenderFrame* render_frame,
-    base::WeakPtr<Delegate> delegate) {
-  v8::Isolate* isolate = blink::MainThreadIsolate();
-  v8::HandleScope handle_scope(isolate);
-  v8::Local<v8::Context> context =
-      render_frame->GetWebFrame()->MainWorldScriptContext();
-  if (context.IsEmpty())
-    return;
-
-  v8::Context::Scope context_scope(context);
-
-  gin::Handle<SSLCertificateErrorPageController> controller = gin::CreateHandle(
-      isolate, new SSLCertificateErrorPageController(delegate));
-  if (controller.IsEmpty())
-    return;
-
-  v8::Local<v8::Object> global = context->Global();
-  global->Set(gin::StringToV8(isolate, "certificateErrorPageController"),
-              controller.ToV8());
-}
-
-SSLCertificateErrorPageController::SSLCertificateErrorPageController(
-    base::WeakPtr<Delegate> delegate)
-    : delegate_(delegate) {}
-
-SSLCertificateErrorPageController::~SSLCertificateErrorPageController() {}
-
-void SSLCertificateErrorPageController::DontProceed() {
-  SendCommand(
-      security_interstitials::SecurityInterstitialCommand::CMD_DONT_PROCEED);
-}
-
-void SSLCertificateErrorPageController::Proceed() {
-  SendCommand(security_interstitials::SecurityInterstitialCommand::CMD_PROCEED);
-}
-
-void SSLCertificateErrorPageController::ShowMoreSection() {
-  SendCommand(security_interstitials::SecurityInterstitialCommand::
-                  CMD_SHOW_MORE_SECTION);
-}
-
-void SSLCertificateErrorPageController::OpenHelpCenter() {
-  SendCommand(security_interstitials::SecurityInterstitialCommand::
-                  CMD_OPEN_HELP_CENTER);
-}
-
-void SSLCertificateErrorPageController::OpenDiagnostic() {
-  SendCommand(
-      security_interstitials::SecurityInterstitialCommand::CMD_OPEN_DIAGNOSTIC);
-}
-
-void SSLCertificateErrorPageController::Reload() {
-  SendCommand(security_interstitials::SecurityInterstitialCommand::CMD_RELOAD);
-}
-
-void SSLCertificateErrorPageController::OpenDateSettings() {
-  SendCommand(security_interstitials::SecurityInterstitialCommand::
-                  CMD_OPEN_DATE_SETTINGS);
-}
-
-void SSLCertificateErrorPageController::OpenLogin() {
-  SendCommand(
-      security_interstitials::SecurityInterstitialCommand::CMD_OPEN_LOGIN);
-}
-
-void SSLCertificateErrorPageController::DoReport() {
-  SendCommand(
-      security_interstitials::SecurityInterstitialCommand::CMD_DO_REPORT);
-}
-
-void SSLCertificateErrorPageController::DontReport() {
-  SendCommand(
-      security_interstitials::SecurityInterstitialCommand::CMD_DONT_REPORT);
-}
-
-void SSLCertificateErrorPageController::OpenReportingPrivacy() {
-  SendCommand(security_interstitials::SecurityInterstitialCommand::
-                  CMD_OPEN_REPORTING_PRIVACY);
-}
-
-void SSLCertificateErrorPageController::OpenWhitepaper() {
-  SendCommand(
-      security_interstitials::SecurityInterstitialCommand::CMD_OPEN_WHITEPAPER);
-}
-
-void SSLCertificateErrorPageController::ReportPhishingError() {
-  SendCommand(security_interstitials::SecurityInterstitialCommand::
-                  CMD_REPORT_PHISHING_ERROR);
-}
-
-void SSLCertificateErrorPageController::SendCommand(
-    security_interstitials::SecurityInterstitialCommand command) {
-  if (delegate_) {
-    delegate_->SendCommand(command);
-  }
-}
-
-gin::ObjectTemplateBuilder
-SSLCertificateErrorPageController::GetObjectTemplateBuilder(
-    v8::Isolate* isolate) {
-  return gin::Wrappable<SSLCertificateErrorPageController>::
-      GetObjectTemplateBuilder(isolate)
-          .SetMethod("dontProceed",
-                     &SSLCertificateErrorPageController::DontProceed)
-          .SetMethod("proceed", &SSLCertificateErrorPageController::Proceed)
-          .SetMethod("showMoreSection",
-                     &SSLCertificateErrorPageController::ShowMoreSection)
-          .SetMethod("openHelpCenter",
-                     &SSLCertificateErrorPageController::OpenHelpCenter)
-          .SetMethod("openDiagnostic",
-                     &SSLCertificateErrorPageController::OpenDiagnostic)
-          .SetMethod("reload", &SSLCertificateErrorPageController::Reload)
-          .SetMethod("openDateSettings",
-                     &SSLCertificateErrorPageController::OpenDateSettings)
-          .SetMethod("openLogin", &SSLCertificateErrorPageController::OpenLogin)
-          .SetMethod("doReport", &SSLCertificateErrorPageController::DoReport)
-          .SetMethod("dontReport",
-                     &SSLCertificateErrorPageController::DontReport)
-          .SetMethod("openReportingPrivacy",
-                     &SSLCertificateErrorPageController::OpenReportingPrivacy)
-          .SetMethod("openWhitepaper",
-                     &SSLCertificateErrorPageController::OpenWhitepaper)
-          .SetMethod("reportPhishingError",
-                     &SSLCertificateErrorPageController::ReportPhishingError);
-}
