--- /dev/null
+<?php
+
+namespace Drupal\Core\Theme;
+use Drupal\Core\Extension\Extension;
+
+/**
+ * Defines an interface which contain theme initialization logic.
+ */
+interface ThemeInitializationInterface {
+
+ /**
+ * Initializes a given theme.
+ *
+ * This loads the active theme, for example include its engine file.
+ *
+ * @param string $theme_name
+ * The machine name of the theme.
+ *
+ * @return \Drupal\Core\Theme\ActiveTheme
+ * An active theme object instance for the given theme.
+ */
+ public function initTheme($theme_name);
+
+ /**
+ * Builds an active theme object.
+ *
+ * @param string $theme_name
+ * The machine name of the theme.
+ *
+ * @return \Drupal\Core\Theme\ActiveTheme
+ * An active theme object instance for the given theme.
+ *
+ * @throws \Drupal\Core\Theme\MissingThemeDependencyException
+ * Thrown when base theme for installed theme is not installed.
+ */
+ public function getActiveThemeByName($theme_name);
+
+ /**
+ * Loads a theme, so it is ready to be used.
+ *
+ * Loading a theme includes loading and initializing the engine,
+ * each base theme and its engines.
+ *
+ * @param \Drupal\Core\Theme\ActiveTheme $active_theme
+ * The theme to load.
+ */
+ public function loadActiveTheme(ActiveTheme $active_theme);
+
+ /**
+ * Builds up the active theme object from extensions.
+ *
+ * @param \Drupal\Core\Extension\Extension $theme
+ * The theme extension object.
+ * @param \Drupal\Core\Extension\Extension[] $base_themes
+ * An array of extension objects of base theme and its bases. It is ordered
+ * by 'next parent first', meaning the top level of the chain will be first.
+ *
+ * @return \Drupal\Core\Theme\ActiveTheme
+ * The active theme instance for the passed in $theme.
+ */
+ public function getActiveTheme(Extension $theme, array $base_themes = []);
+
+}