Was looking at how WebKit implements the WebShare API, and they have this nice 
method `completeURL(str)` [1] that resolved URLs relative to, I guess, the 
`Document` object (or whatever context is). So they can basically do this c++: 

```
    Optional<URL> url;
    if (!data.url.isEmpty()) {
        url = context.completeURL(data.url);
    }
```

Do we have an equivalent in Gecko? 

Right now, in Gecko, I'm having to do this:

```
  nsAutoString url;
  if (aData.mUrl.WasPassed()) {
    auto doc = mWindow->GetExtantDoc();
    if (!doc) {
      aRv.Throw(NS_ERROR_UNEXPECTED);
      return nullptr;
    }

    nsresult rv;
    nsCOMPtr<nsIURI> resolvedUri;
    rv = NS_NewURI(getter_AddRefs(resolvedUri), aData.mUrl.Value(), nullptr,
                   doc->GetDocumentURI(), nsContentUtils::GetIOService());
    if (NS_WARN_IF(NS_FAILED(rv))) {
      aRv.ThrowTypeError<MSG_INVALID_URL>(aData.mUrl.Value());
      return nullptr;
    }
    nsAutoCString utf8href;
    nsresult resolveURLRv = resolvedUri->GetSpec(utf8href);
    if (NS_FAILED(resolveURLRv)) {
      aRv.Throw(NS_ERROR_DOM_BAD_URI);
      return nullptr;
    }
    CopyUTF8toUTF16(utf8href, url);
  }
```

Which could maybe be wrapped into a nice utility function and placed somewhere? 
Or maybe something like that already exists? 

Also, having to use `nsIURI` feels kinda sad when we implement the URL 
Standard.... Can we use URL  somehow be used as a drop in replacement for 
nsIURI?  

https://github.com/WebKit/webkit/blob/master/Source/WebCore/page/Navigator.cpp#L123
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to