diff options
-rw-r--r-- | desktop/browser.c | 30 | ||||
-rw-r--r-- | include/netsurf/browser_window.h | 13 |
2 files changed, 43 insertions, 0 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index 84f6681c8..1c8aa95fa 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -2267,6 +2267,36 @@ nsurl* browser_window_access_url(struct browser_window *bw) return corestring_nsurl_about_blank; } +/* Exported interface, documented in include/netsurf/browser_window.h */ +nserror browser_window_get_url( + struct browser_window *bw, + bool fragment, + nsurl** url_out) +{ + nserror err; + nsurl *url; + + assert(bw != NULL); + + if (!fragment || bw->frag_id == NULL || bw->loading_content != NULL) { + /* If there's a loading content, then the bw->frag_id will have + * been trampled, possibly with a new frag_id, but we will + * still be returning the current URL, so in this edge case + * we just drop any fragment. */ + url = nsurl_ref(browser_window_access_url(bw)); + + } else { + err = nsurl_refragment(browser_window_access_url(bw), + bw->frag_id, &url); + if (err != NSERROR_OK) { + return err; + } + } + + *url_out = url; + return NSERROR_OK; +} + /* Exported interface, documented in browser.h */ const char* browser_window_get_title(struct browser_window *bw) { diff --git a/include/netsurf/browser_window.h b/include/netsurf/browser_window.h index c3ff7997e..439b0785d 100644 --- a/include/netsurf/browser_window.h +++ b/include/netsurf/browser_window.h @@ -210,6 +210,19 @@ nserror browser_window_navigate_up(struct browser_window *bw, bool new_window); struct nsurl* browser_window_access_url(struct browser_window *bw); /** + * Access a browser window's URL. + * + * \param[in] bw browser window + * \param[in] fragment Whether to include any URL fragment. + * \param[out] url_out Returns a ref to the URL on success. + * \return NSERROR_OK, or appropriate error otherwise. + */ +nserror browser_window_get_url( + struct browser_window *bw, + bool fragment, + struct nsurl** url_out); + +/** * Get the title of a browser_window. * * \param bw The browser window. |