I would suggest the following algorithm:
Step 1 Walk through all the nodes. If you find a blue node, do a depth-first search in the directed graph to find out the set of white nodes reachable from it. Don't cross blue nodes while doing the DFS. Along with the set of nodes, store the starting blue node and the outgoing blue nodes that you discovered during the DFS.
You end up with multiple sets of white nodes, along with information about the incoming and outgoing blue nodes:
(bear with me, my mouse drawing skills are really bad)
Step 2 As you can see, you might have overlaps. There are two possibilities to resolve this:
Merge overlapping sets by using a disjoint-set data structure afterwards. This results in a O(n² + m) worst case runtime.
Avoid creating the overlaps in the first place by modifying the standard DFS algorithm. It should detect when you reach a node that you have already seen in one of the previously explored sets. It should then not explore the subgraph further, but record that the currently explored set and the overlapping one are to be merged later. Afterwards you can find the connected components in the merging graph. This will give you a O(n + m) runtime, which is a lot better.
You end up with a collection of disjoint sets of white nodes together with respective incoming and outgoing blue nodes: