## Meta -

OS:  

<!-- Windows 10? OSX? -->

Selenium Version:  

<!-- 2.52.0, IDE, etc -->

3.0.0-beta3
Browser:  

<!-- Internet Explorer?  Firefox? 
Firefox

FIREFOX 48+ IS ONLY COMPATIBLE WITH GECKODRIVER. Any issue logged here for 48+ will be closed as a duplicate of #2559

If the issue is with Google Chrome consider logging an issue with chromedriver instead:
https://sites.google.com/a/chromium.org/chromedriver/help

If the issue is with Microsoft Edge consider logging an issue with Microsoft instead:
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/

If the issue is with Firefox GeckoDriver (aka Marionette) consider logging an issue with Mozilla:
https://bugzilla.mozilla.org/buglist.cgi?product=Testing&component=Marionette

If the issue is with Safari, only Safari 10+ is supported. Please log any Safari issue with Apple:
https://bugreport.apple.com/

If the issue is with PhantomJS consider logging an issue with Ghostdriver:
https://github.com/detro/ghostdriver

-->

Browser Version:  

<!-- e.g.: 49.0.2623.87 (64-bit) -->
## Expected Behavior -

When user specifies a custom browser binary location via `FirefoxBinary` object, the location should be honored by `FirefoxDriver` and it should be spawned via geckodriver by passing the location to geckodriver via `GeckoDriverService`
## Actual Behavior -

This is currently not the case.
## Steps to reproduce -

<!-- 
Please be sure to include an SSCCE (Short, Self Contained, Correct [compilable] example) http://sscce.org/ 
If you can't provide a link to the page, consider creating a reproducible page on https://jsfiddle.net/
-->

The following test code can be executed to recreate the problem

```
public static void main(String[] args) {
    RemoteWebDriver driver = null;
    try {
        DesiredCapabilities caps = DesiredCapabilities.firefox();
        caps.setCapability("marionette", true);
        //Simulating as if the binary is available in a diff location outside of the default location
        FirefoxBinary binary = new FirefoxBinary(new File("/Applications/Firefox.app/Contents/MacOS/firefox-bin-new"));
        driver = new FirefoxDriver(binary, new FirefoxProfile());
        driver.get("http://www.seleniumhq.org/download/maven.jsp");
        System.err.println("Page title : " + driver.getTitle());

    } finally {
        if (driver != null) {
            driver.quit();
        }
    }
}

```

*/
  private static Capabilities dropCapabilities(Capabilities capabilities) {
    if (capabilities == null) {
      return new DesiredCapabilities();
    }
    DesiredCapabilities caps;
    if (isLegacy(capabilities)) {
      final Set<String> toRemove = Sets.newHashSet(BINARY, PROFILE);
      caps = new DesiredCapabilities(Maps.filterKeys(capabilities.asMap(), new Predicate<String>() {
        public boolean apply(String key) {
          return !toRemove.contains(key);
        }
      }));
    } else {
      caps = new DesiredCapabilities(capabilities);
    }
    
    Proxy proxy = Proxy.extractFrom(capabilities);
    if (proxy != null) {
      caps.setCapability(PROXY, new BeanToJsonConverter().convert(proxy));
    }
    return caps;
  }
  public <X> X getScreenshotAs(OutputType<X> target) {
    
    String base64 = execute(DriverCommand.SCREENSHOT).getValue().toString();
    
    return target.convertFromBase64Png(base64);
  }
  public static class LazyCommandExecutor implements CommandExecutor, NeedsLocalLogs {