diff --git a/Tools/BuildSlaveSupport/ews-build/factories.py b/Tools/BuildSlaveSupport/ews-build/factories.py
index 1aa7bff..a16d2f0 100644
--- a/Tools/BuildSlaveSupport/ews-build/factories.py
+++ b/Tools/BuildSlaveSupport/ews-build/factories.py
@@ -27,7 +27,7 @@
 from steps import (ApplyPatch, ApplyWatchList, CheckOutSource, CheckOutSpecificRevision, CheckPatchRelevance,
                    CheckStyle, CompileJSC, CompileWebKit, ConfigureBuild,
                    DownloadBuiltProduct, ExtractBuiltProduct, InstallGtkDependencies, InstallWpeDependencies, KillOldProcesses,
-                   PrintConfiguration, RunAPITests, RunBindingsTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests,
+                   PrintConfiguration, RunAPITests, RunBindingsTests, RunBuildWebKitOrgUnitTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests,
                    RunJavaScriptCoreTests, RunWebKit1Tests, RunWebKitPerlTests,
                    RunWebKitPyTests, RunWebKitTests, UpdateWorkingDirectory, ValidatePatch)
 
@@ -183,3 +183,4 @@
         Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, checkRelevance=True)
         self.addStep(RunEWSUnitTests())
         self.addStep(RunEWSBuildbotCheckConfig())
+        self.addStep(RunBuildWebKitOrgUnitTests())
diff --git a/Tools/BuildSlaveSupport/ews-build/steps.py b/Tools/BuildSlaveSupport/ews-build/steps.py
index 9c7fbb2..948a714 100644
--- a/Tools/BuildSlaveSupport/ews-build/steps.py
+++ b/Tools/BuildSlaveSupport/ews-build/steps.py
@@ -225,7 +225,9 @@
     ]
 
     services_paths = [
+        'Tools/BuildSlaveSupport/build.webkit.org-config',
         'Tools/BuildSlaveSupport/ews-build',
+        'Tools/BuildSlaveSupport/Shared',
     ]
 
     jsc_paths = [
@@ -602,6 +604,20 @@
         super(RunWebKitPerlTests, self).__init__(timeout=2 * 60, logEnviron=False, **kwargs)
 
 
+class RunBuildWebKitOrgUnitTests(shell.ShellCommand):
+    name = 'build-webkit-org-unit-tests'
+    description = ['build-webkit-unit-tests running']
+    command = ['python', 'steps_unittest.py']
+
+    def __init__(self, **kwargs):
+        shell.ShellCommand.__init__(self, workdir='build/Tools/BuildSlaveSupport/build.webkit.org-config', timeout=2 * 60, logEnviron=False, **kwargs)
+
+    def getResultSummary(self):
+        if self.results == SUCCESS:
+            return {u'step': u'Passed build.webkit.org unit tests'}
+        return {u'step': u'Failed build.webkit.org unit tests'}
+
+
 class RunEWSUnitTests(shell.ShellCommand):
     name = 'ews-unit-tests'
     description = ['ews-unit-tests running']
diff --git a/Tools/BuildSlaveSupport/ews-build/steps_unittest.py b/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
index e2391b3..5b13641 100644
--- a/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
+++ b/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
@@ -39,7 +39,7 @@
                    CompileJSC, CompileJSCToT, CompileWebKit, CompileWebKitToT, ConfigureBuild,
                    DownloadBuiltProduct, ExtractBuiltProduct, ExtractTestResults, InstallGtkDependencies, InstallWpeDependencies, KillOldProcesses,
                    PrintConfiguration, ReRunAPITests, ReRunJavaScriptCoreTests, ReRunWebKitTests, RunAPITests, RunAPITestsWithoutPatch,
-                   RunBindingsTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests, RunJavaScriptCoreTests, RunJavaScriptCoreTestsToT, RunWebKit1Tests,
+                   RunBindingsTests, RunBuildWebKitOrgUnitTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests, RunJavaScriptCoreTests, RunJavaScriptCoreTestsToT, RunWebKit1Tests,
                    RunWebKitPerlTests, RunWebKitPyTests, RunWebKitTests, TestWithFailureCount, Trigger, TransferToS3, UnApplyPatchIfRequired,
                    UpdateWorkingDirectory, UploadBuiltProduct, UploadTestResults, ValidatePatch)
 
@@ -523,6 +523,42 @@
         return self.runStep()
 
 
+class TestRunBuildWebKitOrgUnitTests(BuildStepMixinAdditions, unittest.TestCase):
+    def setUp(self):
+        self.longMessage = True
+        return self.setUpBuildStep()
+
+    def tearDown(self):
+        return self.tearDownBuildStep()
+
+    def test_success(self):
+        self.setupStep(RunBuildWebKitOrgUnitTests())
+        self.expectRemoteCommands(
+            ExpectShell(workdir='build/Tools/BuildSlaveSupport/build.webkit.org-config',
+                        timeout=120,
+                        logEnviron=False,
+                        command=['python', 'steps_unittest.py'],
+                        )
+            + 0,
+        )
+        self.expectOutcome(result=SUCCESS, state_string='Passed build.webkit.org unit tests')
+        return self.runStep()
+
+    def test_failure(self):
+        self.setupStep(RunBuildWebKitOrgUnitTests())
+        self.expectRemoteCommands(
+            ExpectShell(workdir='build/Tools/BuildSlaveSupport/build.webkit.org-config',
+                        timeout=120,
+                        logEnviron=False,
+                        command=['python', 'steps_unittest.py'],
+                        )
+            + ExpectShell.log('stdio', stdout='Unhandled Error. Traceback (most recent call last): Keys in cmd missing from expectation: [logfiles.json]')
+            + 2,
+        )
+        self.expectOutcome(result=FAILURE, state_string='Failed build.webkit.org unit tests')
+        return self.runStep()
+
+
 class TestKillOldProcesses(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
         self.longMessage = True
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 3f042b1..db98ad2 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,19 @@
+2019-10-11  Aakash Jain  <aakash_jain@apple.com>
+
+        [ews] Services EWS should also run build.webkit.org unit tests
+        https://bugs.webkit.org/show_bug.cgi?id=202864
+
+        Reviewed by Jonathan Bedard.
+
+        * BuildSlaveSupport/ews-build/factories.py:
+        (ServicesFactory.__init__): Added new RunBuildWebKitUnitTests step.
+        * BuildSlaveSupport/ews-build/steps.py:
+        (CheckPatchRelevance): Added paths for build.webkit.org code.
+        (RunBuildWebKitUnitTests): Build step to run build.webkit.org unit tests.
+        (RunBuildWebKitUnitTests.__init__): Set workdir, timeout and logEnviron.
+        (RunBuildWebKitUnitTests.getResultSummary): Customize Buildbot messages for this build step.
+        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
+
 2019-10-11  Chris Dumez  <cdumez@apple.com>
 
         Move SuspendedPage logic from WebProcessPool to new WebBackForwardCache class
