Giter Site home page Giter Site logo

cretz / doogie Goto Github PK

View Code? Open in Web Editor NEW
280.0 280.0 28.0 741 KB

A Chromium-based web browser with tree-style pages

Home Page: https://cretz.github.io/doogie

License: MIT License

Go 4.14% C++ 88.49% QMake 0.80% JavaScript 4.52% HTML 1.23% TSQL 0.83%

doogie's People

Contributors

cretz avatar dwarfcrank avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

doogie's Issues

Audio Icon Support

From my minimal research, it appears CEF does not tell us whether a browser is playing audio, so I can't add an audio icon like FF/Chrome do. This might be coming soon

Installer

Create installers/packages for popular package managers and OS's and keep them up to date.

CEF Window Starts Out Tiny Before Expanding In Size

Opening a page in the background or just opening the app w/ some pages stored, you can see that the window is tiny until the first resize is called which makes it big. Not sure if this is a CEF thing or not, but page is often loaded before growing in size.

All I really want to do is get rid of this flicker, but if it's also changing the JS-visible browser dimensions then we need to fix that too.

Reduce Memory Usage of Filter Rules

Right now it's a primitive algorithm to store rules in hash tables. We can reduce this with effort. Right now a large list can cost 50MB+ which is not cool.

Support SSL Failure Bypass

Have all the things there, just need to support it. Consider whether this issue or another will support permanent exceptions (as opposed to just that browser exception).

CI Support

Need to do regular builds and regular tests. Probably need something like appveyor so we can do UI-based integration tests.

Auto-Update Support

Multiple things here:

  • Need CI support w/ appveyor or others
  • Application needs to be able to fetch update and overwrite files in place (or consider a separate executable to do the update)
  • Needs to download the upgrade in the background. Maybe just downloads a self-referencing binary diff executable.
  • May need sqlite migrations support at some point in the future

Geolocation Support

Simply support CefGeolocationHandler::OnRequestGeolocationPermission, not sure we even have to leverage Qt's geolocation utils.

Flash Support

Per this issue and other forum posts, we simply need --ppapi-flash-path or --enable-system-flash as a CLI arg. This should be a bubble-level setting.

Idea for "chains" or "streams" of browsing

I have had a vague idea of an improvement upon the traditional browser history model for a little while, and when I came across doogie a moment ago from the HN link you posted, and saw how you implemented workspaces and page suspension, I thought about it some more, and I thought you might find the idea useful in your project. Let me see if I can describe it clearly.

There are a few problems with the current browser history/session/tab model of browsing:

In real life, when reading a book or magazine, etc, if I want to stop reading it and come back to it later, I can mark my place and set it down. The human ability for spatial memory and navigation makes it natural (for some people, at least) to find it again later. In the meantime, to the extent I have physical room, it doesn't occupy resources.

In a browser, if I want to stop reading a page and come back to it later, I can bookmark the page, but that a) doesn't keep my place within the page, and b) doesn't keep the history associated with that browsing session, which is often valuable, as a session of browsing that follows links from one page to another may reach some dead ends which I may want to backtrack from. I can also close the tab and try to find it with history search at a later time, but that's not very efficient, and doesn't generally preserve the history (unless I'm willing to continue digging through the history to find every previous page). A third option is to leave the tab open, which preserves my place on the page and the history, but this means the tab continues to take up resources (which with some browsers, like Chrome, results in enormous memory usage).

So what I'd like to be able to do is close the tab, freeing up resources, but preserving the ability to pick up where I left off in that browsing session. That way, if I had been, say, browsing Wikipedia articles about World War II, following links here and there, backtracking to earlier pages, following one subtopic to another, I could come back to my earlier session and resume where I left off. Or if I had been searching Google about a particular topic, having to dig into several pages of search results, I wouldn't have to start that process from the beginning.

So I would like to propose a slightly different model of browsing. I'll call it, for now, "chains." Basically, it would work like this: when you close a tab, the tab's entire history is stored in the browser history. The browser history dialog then has a "chains" view that displays not just pages visited but "chains", which can be expanded, tree-style, to show their history. The user can then reopen a "chain" from any point in its history tree.

Chains should also be bookmarkable, with tags and comments, so that users can store ones that they know they want to resume later, rather than having to dig them out of the history.

It might not be so much to implement, because it would basically work like a browser's existing session-store functionality. e.g. Firefox's sessionstore.js stores every window, every tab, and every tab's history. If entries in that could be archived, bookmarked, and searched, it would basically be this feature.

I don't know of any browser that does this, so if you were to do it, it might be a unique feature you could tout. :) Thanks for reading.

Plugin Support

This issue is kinda a catch-all for plugins. Some quick thoughts:

  • Need a more stable ABI before exposing or we need to only expose certain pieces
  • Essentially a DLL that can use all the Qt it wants
  • There is no plugin store or plugin vetting process, if you use a plugin you are basically giving the plugin dev full rights over everything. We don't have the bandwidth to be the jury here.
  • Would of course need a plugin init that does version check and what not
  • Not to be confused with extensions

About Dialog

Add an about dialog or co-opt chrome://credits or something.

Multi-Window Doogie

Need to support an alternative Doogie window. There to some synchronization/atomicity issues. Right now we aren't prepared for multiple main windows nor are we prepared for multiple Doogie instances for the same profile.

We need to solve this, but a lot of thought is required on how to show a separate window. The best way I can think about this early on is to firstly, prevent multiple Doogie instances for the same profile. As for new windows, need to be able to "undock"/"unhinge" the browser window into its own separate window. This means when it's selected in the tree, the main window shows "this window is popped out, click here to activate" or something. When the window is activated otherwise, it becomes the selected tree item or something. I dunno, thought needed.

Handle Form Resubmission

Reposting from CEF forum:

In Chrome, when I attempt to reload a page that was the result of a form submission, I am presented a dialog asking me if I want to resubmit. I want to replicate this in CEF. Based on one other post I would use OnBeforeNavigate (after all, there is NavigationType of NAVIGATION_FORM_RESUBMITTED), but it is never called on Reload for POST (yet it is for GET); I don't think the reload is even happening. Same problem with OnBeforeLoad, it is never called (again, because the page is probably never even reloading).

Will open CEF issue at some point.

Better Address Bar Search

Some annoying things:

  • DDG only appears at the top if you start w/ !g, it should also appear up there if the string contains a space followed by a bang.
  • Gotta press down then enter to do the search. Make it where, if the URL is not a valid URL, search is top and it is auto-selected
  • Consider not showing the full DDG URL

Address Bar and Browser Focus Issue

Go to a link, click something (to make navigation history). Then, click off the address bar and into the browser, then back into the address bar and press backspace and watch the nav go back.

We need to solve this as a focus issue. the address bar obtaining focus is not removing focus from the browser. There are other ways of triggering this such as entering a text area in the browser, going back to the URL, going back to the text area, and seeing URL still retain a cursor.

Mic/Cam Support

This requires --enable-media-stream as a CLI arg. Unfortunately, CEF does not allow a permission-based access, it's either CLI or bust (ref this post). I asked but was unanswered concerning mic/vid access without restart.

In order to work around CEF's limitations, we'd have to restart the process which is not really acceptable. Therefore the proper way to handle this is to submit a PR for CEF to support a callback for media stream access. At some point I will open a CEF issue.

Execution Fails in Windows 7

Doogie dies immediately with error level 2 if ran by this batch script:

doogie
echo %ERRORLEVEL%
pause

My computer runs Windows 7 Home Premium 64-bit SP1.

Upon Tree Item Delete, Move Current Marker Down, Not Up

Right now, and by default in Qt IIRC, when you delete a tree item, the next one up is then made current. It is much more natural (and in line with FF's TST) to move it down instead unless there isn't one at which point we move it down. Might have to intercept some kind of remove event.

Suppress JS Dialog Support

Need to be able to stop showing JS dialogs if the user wants it that way. This should be a profile-level setting (really just in the sqlite DB) and should have a UI to revert.

Linux Support

For the most part, we just need to fill in the platform-specific pieces. There may be some features not supported initially (e.g. there is no Linux-desktop common approach to view an SSL cert).

Support Auto Complete Suppression

This is two-pronged:

  • Ability for bubble to say they don't want to add to auto complete (i.e. incognito)
  • Ability to press the delete button when one of the auto complete suggestions is selected

Note, if it's determined worth it, maybe a dialog for configuring auto complete in many ways.

macOS Support

I will not maintain a macOS version. So I am looking for two things here:

  • Someone to first complete this on the PoC at cretz/qt_cef_poc#3 then, after some discussions, apply the knowledge to this project
  • Someone do commit to maintaining this OS since I will not. This includes a CI process, testing pre-releases, etc.

If the CLA reqs for this project are not something someone wants to sign for maintaining this, I'll gladly work with a fork to make sure this repo abstracts anything away which would make the macOS build easier in a separate repository.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.